0434-字符串中的单词数

Raphael Liu Lv10

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。

请注意,你可以假定字符串里不包括任何不可打印的字符。

示例:

**输入:** "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
}

复杂度分析

  • 时间复杂度:$O(n)$,只需要遍历一遍字符串检测每个下标即可。

  • 空间复杂度:$O(1)$。

 Comments
On this page
0434-字符串中的单词数