LeetCode 进阶之路 - 最后一个单词的长度

2022-06-10 19:22:41 浏览数 (1)

代码语言:javascript复制
给定一个仅包含大小写字母和空格' '的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。

如果不存在最后一个单词,请返回 0。

说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。


示例:

输入: "Hello World"
输出: 5
代码语言:javascript复制
public class LengthofLastWord {
    /**
     * 不能用split()
     * @param s
     * @return
     */
    public int lengthOfLastWord(String s) {
        String[] sArray = s.split(" ");
        if (sArray.length > 0) {
            return sArray[sArray.length-1].length();
        }
        return 0;
    }

    /**
     * 初版
     * @param s
     * @return
     */
    public int lengthOfLastWord1(String s) {
        int temp = 0;
        /** 最初的时候想直接用trim()来去空格,但是想想好像不太好,然后借鉴了题解的高人的代码,通过循环判断尾部是否有空格,有的话长度就减1,直到尾部没有空格为止
        * 代码:while (lenth >= 0 && s.charAt(lenth) == ' ') lenth--;
        */
        s = s.trim();
        // 通过从后往前遍历字符串,定义一个temp来进行计数,temp每次加1,直到遇到空格后返回当前temp值就是单词的长度。
        for (int i = s.length() -1; i >= 0; i--) {
            if (s.charAt(i) == ' ') {
                return temp;
            }
            temp  ;
            // 这里有一种单词是单个字符的情况,如“a ”、“a”等,需要单独进行处理,直接返回0即可。
            if (i == 0) return temp;
        }
        return 0;
    }

    /**
     * 修正后
     * @param s
     * @return
     */
    public int lengthOfLastWord2(String s) {
        int temp = 0;
        int lenth = s.length() -1;
        // 去尾部空格
        while (lenth >= 0 && s.charAt(lenth) == ' ') lenth--;
        // 优化后的代码,最后返回temp就不用在循环里面放i==0的判断了,如果s是空的话也不会走进循环,直接返回0
        for (int i = lenth; i >= 0; i--) {
            if (s.charAt(i) == ' ') return temp;
            temp  ;
        }
        return temp;
    }


    /**
     * 网上大佬写的代码,我发现我对while语句用的还是不熟练,得多学学
     * @param s
     * @return
     */
    public int lengthOfLastWord3(String s) {
        int end = s.length() - 1;
        while(end >= 0 && s.charAt(end) == ' ') end--;
        if(end < 0) return 0;
        int start = end;
        while(start >= 0 && s.charAt(start) != ' ') start--;
        return end - start;

    }

    public static void main(String[] args) {
        LengthofLastWord word = new LengthofLastWord();
//        String s = "hello";
        String s = "a bbb  ";
        System.out.println(word.lengthOfLastWord2(s));
    }
}

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/leetcode进阶之路-最后一个单词的长度

0 人点赞