一、 题目
给定一个字符串s由大/小写字母和空的空间字符‘ ‘,返回字符串的最后一个单词的长度。
如果最后一个单词不存在,则返回0。
注:一个单词被定义为一个不带空格的字符序列。
例如,
给出s =“Hello World”,
返回5。
二、 分析
没有什么复杂的算法,按照规则考虑所有情况就行,有下面的几种情况:
1、“ ”
2、“abc”
3、“ abc”
4、“abc ”
我使用了两种方法,
1、从左到右扫描,首先过滤前面的空格,扫描符合的字符数,再判空或尾部,并把当前的有效长度保存,如果后面还有有效的字符,那么就更新这个值。
class Solution { public: int lengthOfLastWord(const char *s) { int count = 0; int i = 0; int last = 0; while(s[i] != '\0'){ while(s[i] == ' ') i++; if(s[i] == '\0') return last; while(s[i] != ' '&& s[i] != '\0'){ count++; i++; } if(s[i] == '\0') return count; last = count; count = 0; } return last; } };
2、求出字符串长度,从右往左扫描,此时只需要找到第一个单词长度即可。
class Solution { public: int lengthOfLastWord(const char *s) { int len = strlen(s) - 1; int count = 0; while(len >= 0 && s[len] == ' ') len --; while(len >= 0 && s[len] != ' '){ count++; len--; } return count; } };
原文地址:http://blog.csdn.net/zzucsliang/article/details/43882293