统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
请注意,你可以假定字符串里不包括任何不可打印的字符。
示例:
**输入:** "Hello, my name is John"
**输出:** 5
**解释:** 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。
方法一:原地法
思路与算法
计算字符串中单词的数量,就等同于计数单词的第一个下标的个数。因此,我们只需要遍历整个字符串,统计每个单词的第一个下标的数目即可。
满足单词的第一个下标有以下两个条件:
另一种方法直接使用语言内置的 split 函数可直接分离出字符串中的每个单词,在此我们不再详细展开。
[sol1-C++]1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public: int countSegments(string s) { int segmentCount = 0;
for (int i = 0; i < s.size(); i++) { if ((i == 0 || s[i - 1] == ' ') && s[i] != ' ') { segmentCount++; } }
return segmentCount; } };
|
[sol1-Java]1 2 3 4 5 6 7 8 9 10 11 12 13
| class Solution { public int countSegments(String s) { int segmentCount = 0;
for (int i = 0; i < s.length(); i++) { if ((i == 0 || s.charAt(i - 1) == ' ') && s.charAt(i) != ' ') { segmentCount++; } }
return segmentCount; } }
|
[sol1-C#]1 2 3 4 5 6 7 8 9 10 11 12 13
| public class Solution { public int CountSegments(string s) { int segmentCount = 0;
for (int i = 0; i < s.Length; i++) { if ((i == 0 || s[i - 1] == ' ') && s[i] != ' ') { segmentCount++; } }
return segmentCount; } }
|
[sol1-Python]1 2 3 4 5 6 7 8 9
| class Solution: def countSegments(self, s): segment_count = 0
for i in range(len(s)): if (i == 0 or s[i - 1] == ' ') and s[i] != ' ': segment_count += 1
return segment_count
|
[sol1-JavaScript]1 2 3 4 5 6 7 8 9 10 11
| var countSegments = function(s) { let segmentCount = 0;
for (let i = 0; i < s.length; i++) { if ((i === 0 || s[i - 1] === ' ') && s[i] !== ' ') { segmentCount++; } }
return segmentCount; };
|
[sol1-Golang]1 2 3 4 5 6 7 8
| func countSegments(s string) (ans int) { for i, ch := range s { if (i == 0 || s[i-1] == ' ') && ch != ' ' { ans++ } } return }
|
复杂度分析