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出現在 字符串尾部有空格的情況下。