Leecode58 最后一个单词的长度
正向遍历
先考虑从正向遍历 记录每一个单词的长度 如果是最后一个单词则输出;不是最后一个单词就重置单词长度
class Solution {
public:
int lengthOfLastWord(string s) {
int x=0;
int w=0;//记录单词长度
while(x<s.size()){
if(s[x]!=' '){
w++;
x++;
}
else{
while(s[x]==' '){
x++;
}
if(x==s.size()){
return w;//结尾是空格的情况
}
else w=0;
}
}
return w;//结尾是单词的情况
}
};
反向遍历
考虑是最后一个单词的长度 因此从字符串最后开始遍历会简单很多
class Solution {
public:
int lengthOfLastWord(string s) {
int x=s.size()-1;
int w=0;
while(s[x]==' '){
x--;
}
while(s[x]!=' '){
w++;
x--;
if (x<0) return w;//只有一个单词的情况:“hello”
}
return w;
}
};
正向遍历(递归)
在一开始思考的时候还写了这个递归的做法 但时间和空间效率都比较低。
class Solution {
public:
int lengthOfLastWord(string s) {
return last(s,0);
}
int last(string s,int idx){
int w1=0;//单词长度
while(s[idx+w1]!=' '){
w1++;
if(idx+w1==s.size()){
return w1;
}
}
int k=0;//空格长度
while(s[idx+w1+k]==' '){
k++;
}
if(idx+w1+k==s.size()){
return w1;//如果空格后没有单词,则输出
}
else{
return last(s,idx+w1+k);//如果空格后还有单词,则以单词开头字母为idx递归
}
}
};