58.最后一个单词的长度 - 图1

1.题目

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

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

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

示例:

  1. 输入: "Hello World"
  2. 输出: 5

2.思路

这题目写的,字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词这句话的意思就是:”a “ 如果传入的是这个字符串,则最后一个单词为a……。本以为我写对了,然后提交的时候报错……

本来写的是这样的:

    public int lengthOfLastWord(String s) {
        if(s.lastIndexOf(" ") == -1){
            return 0;
        }else {
            return s.substring(s.lastIndexOf(" ") + 1).length();
        }
    }

好吧,看来误解了题意,重新写个版本:

那既然题目说从左向右滚动显示,最后一个单词就是最后出现的单词。那我们选择从右往左遍历,从不是空格的地方开始,到空格的地方结束:

    public int lengthOfLastWord(String s) {
        int length = 0;
        for (int i = s.length() - 1; i >= 0; i--) {
            if (s.charAt(i) != ' '){
                length++;
            }else if (length != 0){
                return length;
            }
        }
        return length;
    }

当length为0且从右边遍历的元素为” “时,表示右边有空格,则接着遍历字符串。

当length为0且从右边遍历的元素不为” “时,表示遍历到了最后的一个单词的末尾,length++。

当length不为0且从右边遍历的元素不为” “时,表示遍历到了最后的一个单词的第n位,length++。

当length不为0且从右边遍历的元素为” “时,表示最后一个单词已经遍历完了,则返回length的数值。

读题还是很重要的啊~