题目是求一个字符串中,最后一个单词的长度
例如:
"" = 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出现在 字符串尾部有空格的情况下。
时间: 2024-10-13 02:33:01