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.还要注意为数组空字符时,len不能--,否则数组下标会变成-1。
class Solution {
public:
int lengthOfLastWord(string s) {
int len = s.length(), sum = 0;
if (len == 0)
return 0;
while (s.at(len-1) == ' '){
if (len == 1){//如果为一个空字符,则跳出
break;
}
len--;
}
for (int i = len-1; i >= 0; i--){
if (s.at(i) != ' ')
sum++;
else break;
}
return sum;
}
};
这种写法太冗余了,经过
优化:
int lengthOfLastWord(string s) {
int num = 0;
for (int i = s.length()-1; i >= 0; i--){
if (isalpha(s[i]))
num++;
else if (num > 0)break;
}
return num;
}
测试代码:
void main(){
Solution s;
string a;
getline(cin,a);
//cin >> a;
cout<<s.lengthOfLastWord(a)<<endl;
}
这题挺基础,却在小细节上折腾了很久,基础很重要。