<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">这道题乍一看很简单,其实还是得稍微有一点点弯弯绕的。主要是边界条件特殊的case比较多。</span>
需要注意到几点:
1. leading space
2. tailing space
3. 整个string全是空格
4. 单词之前好多空格
第一种解法是从前向后扫一遍,没遇到一个空格,记录下位置再继续找下一个空格知道字符串结束。这种方法需要去掉leadig/tailing空格。写起来有一点点繁琐。
class Solution {
public:
int lengthOfLastWord(string s) {
if(s.size()==0)
return 0;
int p=0, q=0, len=s.size()-1;
while(q<s.size()&&s[q]==' '){
q++;
}
q--;
while(len>=0&&s[len]==' '){
len--;
}
len++;
while(p<len){
if(s[p]==' '){
q=p;
}
p++;
}
return (p-q-1)<0?0:p-q-1;
}
};
第二种解法就是从后向前,只用去除最后面的tailing space,写起来稍微见大一些。
class Solution {
public:
int lengthOfLastWord(string s) {
int q=s.size()-1;
int res=0;
while(q>=0&&s[q]==' '){
q--;
}
while(q>=0&&s[q]!=' '){
res++;
q--;
}
return res;
}
};
这种题主要还是要注意spacial case,看到简单题不能太激动,肯定有坑。