LeetCode-lengthOfLastWord

2015-01-27 18:12:53 · 作者: · 浏览: 59
题目是求一个字符串中,最后一个单词的长度
?
例如:
?
"" = 0
?
" ?" =0
?
"length of last word ? ?" = 4
?
这个题目主要的坑在哪里呢,就是要判断一些特殊的情况,这里例举一下:
?
1.空字符串以及 NULL 判断是必须的。
?
2.字符串为一个或多个空格,或者最后一个单词后面又跟了空格
?
?
?
复制代码
?1 class Solution {
?2 public:
?3 ? ? int lengthOfLastWord(const char *s) {
?4 ? ? ? ? if (s == NULL) {
?5 ? ? ? ? ? ? return 0;
?6 ? ? ? ? }
?7 ? ??
?8 ? ? ? ? int result = 0;
?9 ? ? ? ??
10 ? ? ? ? // 当前字符 没结束
11 ? ? ? ? while (*s != '\0') {
12 ? ? ? ? ? ? if (*s == ' ') {
13 ? ? ? ? ? ? ? ? while (s != NULL && *s == ' ') {
14 ? ? ? ? ? ? ? ? ? ? s++;
15 ? ? ? ? ? ? ? ? }
16 ? ? ? ? ? ? }
17 ? ? ? ? ? ? else {
18 ? ? ? ? ? ? ? ? int cur = 0;
19 ? ? ? ? ? ? ? ? while (*s != '\0' && *s != ' ') {
20 ? ? ? ? ? ? ? ? ? ? cur++;
21 ? ? ? ? ? ? ? ? ? ? s++;
22 ? ? ? ? ? ? ? ? }
23 ? ? ? ? ? ? ? ? result = cur;
24 ? ? ? ? ? ? }
25 ? ? ? ? }
26 ? ? ? ? return result;
27 ? ? }
28 };
复制代码
上述代码通过了 Leetcode,如果传递的 字符串是一个obj,还可以通过获取obj.length 从后往前面查找,这里是只传递一个起始的字符指针。
?
首先进行NULL值的判断,然后当指针 s 不为结束符号 '\0' 进行遍历,遍历的时候,只有两种情况,一个是遇到空格,另一个是遇到字符,。
?
遇到的空格可能有多个,即连续的空格,这个时候,可以选择将空格“吃掉”,即多个空格也抽象成一个空格处理。
?
遇到字符时,即表示,当前是一个单词,至于这个单词有多长,我们一直往后面搜索就可以了,同时用一个临时变量 cur 来保存当前 word 的长度 ,s 遇到空格或者结束符号 ’\0‘ 就先停下来,形成一个 word,然后把 word 传值给 result,因为遇到了空格,所以将接下来的任务交给处理空格的 if 判断来处理。
?
?
?
算法总体上抽象为两个分支,遇到空格的情况,以及遇到字符,每次形成一个word,则将其赋值给 result,为什么要用临时变量 cur 呢?
?
因为如果在 空格判断中另 result = 0,word 判断中 result= word.length,那么就会出现bug,这种bug出现在 字符串尾部有空格的情况下。
?
?