1.题目
给定一个仅包含大小写字母和空格 ‘ ‘ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。
示例:
输入: "Hello World"输出: 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的数值。
读题还是很重要的啊~
