题目
给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。
说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。
示例:
输入: “Hello World”
输出: 5
思路一
正序遍历,总的来说分伪三类情况:
- ‘a’ ,’ ‘, ‘b’ 与’ ', ‘b’:重置ret=0;
- ‘a’ ,’ ',:不需要重置,继续即可;
- ’ ':使用初始ret = 0即可;
class Solution {
public int lengthOfLastWord(String s) {
//Step1:判断异常
if(s == null || s.length() == 0) return 0;
//Step2:定义结果变量
int ret = 0;
//Step3:正序遍历
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == ' ' && i+1 < s.length() && s.charAt(i+1) >= 'A'){
ret = 0;
}
if(s.charAt(i) >= 'A') ret++;
}
//Step4:返回结果
return ret;
}
}
思路二
从后面往前面找到第一个单词的长度:如果最后一个字符时’ ',这时ret = 0,因此只有当s.charAt(i) == ’ ’ && ret != 0才能退出循环。
class Solution {
public int lengthOfLastWord(String s) {
//Step1: 判断异常
if(s == null || s.length() == 0) return 0;
//Step2:定义结果变量
int ret = 0;
//Step3:从后往前循环,找到第一个单词长度
for(int i = s.length() - 1; i >= 0; i--){
if(s.charAt(i) == ' ' && ret != 0){
break;
}
if(s.charAt(i) >= 'A'){
ret++;
}
}
//Step4:返回结果变量
return ret;
}
}