[LeetCode] Number of Segments in a String 字串中的分段數量
阿新 • • 發佈:2018-12-27
Count the number of segments in a string, where a segment is defined to be a contiguous sequence of non-space characters.
Please note that the string does not contain any non-printable characters.
Example:
Input: "Hello, my name is John" Output: 5這道題跟之前那道Reverse Words in a String有些類似,不過比那題要簡單一些,因為不用翻轉單詞,只要統計出單詞的數量即可。那麼我們的做法是遍歷字串,遇到空格直接跳過,如果不是空格,則計數器加1,然後用個while迴圈找到下一個空格的位置,這樣就遍歷完了一個單詞,再重複上面的操作直至結束,就能得到正確結果: 解法一:
classSolution { public: int countSegments(string s) { int res = 0, n = s.size(); for (int i = 0; i < n; ++i) { if (s[i] == ' ') continue; ++res; while (i < n && s[i] != ' ') ++i; } return res; } };
下面這種方法是統計單詞開頭的第一個字元,因為每個單詞的第一個字元前面一個字元一定是空格,利用這個特性也可以統計單詞的個數:
解法二:
class Solution { public: int countSegments(string s) { int res = 0; for (int i = 0; i < s.size(); ++i) { if (s[i] != ' ' && (i == 0 || s[i - 1] == ' ')) { ++res; } } return res; } };
下面這種方法用到了C++的字串流操作,利用getline函式取出每兩個空格符之間的字串,由於多個空格符可能連在一起,所以有可能取出空字串,我們要判斷一下,如果取出的是非空字串我們才累加計數器,參見程式碼如下:
解法三:
class Solution { public: int countSegments(string s) { int res = 0; istringstream is(s); string t = ""; while (getline(is, t, ' ')) { if (t.empty()) continue; ++res; } return res; } };
類似題目:
參考資料: