LeetCode-lengthOfLastWord

题目是求一个字符串中,最后一个单词的长度

例如:

"" = 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出现在 字符串尾部有空格的情况下。

 

posted @ 2014-10-20 22:15  wellcheng  阅读(705)  评论(0编辑  收藏  举报