求出一个由空格和字符组正的字符串最后一个单词的长度
Length Of Last Word
solve
Given a string s consists of upper/lower-case alphabets and empty space characters ‘ ‘, return the length of last word in the string.
If the last word does not exist, return 0.
Note: A word is defined as a character sequence consists of non-space characters only.
For example,
Given s = “Hello World”,
return 5.
字符串由字符和空格组成,注意题目要求的是求出最后一个单词的长度,有可能字符串的结尾处有空格,这个题目的关键就是去除结尾处的空格符
一种简便的方法就是从尾部开始扫描,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19class Solution {
public:
int lengthOfLastWord(string s) {
if(s.size() == 0)
return 0;
int count=0;
for(int i = s.length() -1; i >= 0; i--){
if(s[i] == ' '){
if(count == 0) //跳过结尾的空格
continue;
else
return count;
}else
count++;
}
return count;
}
};
lastLen记录上一个单词的长度,curLen记录当前单词的长度
用两个变量lastLen, curLen分别记录前一个和当前word的长度。
- 当前字符为字母时,说明当前word仍然没结束,更新curLen++
- 当前字符为空格时,如果curLen不为0,说明是一个word刚结束,将lastLen更新为curLen。
- 当前字符为空格且curLen=0,说明前一个字符也是空格,不需要额外操作。
- 由于只有在遇到空格时才更新lastLen,当最后一个word后没有空格就结束时,lastLen还没有被更新,所以在搜索完整个s后,如果curLen不为0,则curLen才是真正最后word的长度。而如果最后一个word后有空格,则lastLen为长度。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19int lengthOfLastWord(char* s) {
int curLen = 0, lastLen= 0;
char *p = s;
while(*p){
if(*p != ' ')
curLen++;
//这块要小心处理,处理连续的空格符,直接跳过
else if(curLen != 0){
lastLen = curLen;
curLen = 0;
}
p++;
}
return curLen > 0? curLen: lastLen;
}