Length Of Last Word

求出一个由空格和字符组正的字符串最后一个单词的长度

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
19
class 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的长度。

  1. 当前字符为字母时,说明当前word仍然没结束,更新curLen++
  2. 当前字符为空格时,如果curLen不为0,说明是一个word刚结束,将lastLen更新为curLen。
  3. 当前字符为空格且curLen=0,说明前一个字符也是空格,不需要额外操作。
  4. 由于只有在遇到空格时才更新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
    19
    int 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;
    }