跳转至

434. 字符串中的单词数

题目描述

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

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

示例:

输入: "Hello, my name is John"
输出: 5
解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。

解法

方法一:字符串分割

将字符串 s 按照空格进行分割,然后统计不为空的单词个数。

时间复杂度 $O(n)$,空间复杂度 $O(n)$。

1
2
3
class Solution:
    def countSegments(self, s: str) -> int:
        return len(s.split())
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class Solution {
    public int countSegments(String s) {
        int ans = 0;
        for (String t : s.split(" ")) {
            if (!"".equals(t)) {
                ++ans;
            }
        }
        return ans;
    }
}
1
2
3
4
5
6
7
8
9
class Solution {
public:
    int countSegments(string s) {
        int ans = 0;
        istringstream ss(s);
        while (ss >> s) ++ans;
        return ans;
    }
};
1
2
3
4
5
6
7
8
9
func countSegments(s string) int {
    ans := 0
    for _, t := range strings.Split(s, " ") {
        if len(t) > 0 {
            ans++
        }
    }
    return ans
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
class Solution {
    /**
     * @param String $s
     * @return Integer
     */
    function countSegments($s) {
        $arr = explode(' ', $s);
        $cnt = 0;
        for ($i = 0; $i < count($arr); $i++) {
            if (strlen($arr[$i]) != 0) {
                $cnt++;
            }
        }
        return $cnt;
    }
}

方法二:模拟

直接模拟,遍历字符串,检测每个字符,统计个数。

时间复杂度 $O(n)$,空间复杂度 $O(1)$。

1
2
3
4
5
6
7
class Solution:
    def countSegments(self, s: str) -> int:
        ans = 0
        for i, c in enumerate(s):
            if c != ' ' and (i == 0 or s[i - 1] == ' '):
                ans += 1
        return ans
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class Solution {
    public int countSegments(String s) {
        int ans = 0;
        for (int i = 0; i < s.length(); ++i) {
            if (s.charAt(i) != ' ' && (i == 0 || s.charAt(i - 1) == ' ')) {
                ++ans;
            }
        }
        return ans;
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Solution {
public:
    int countSegments(string s) {
        int ans = 0;
        for (int i = 0; i < s.size(); ++i) {
            if (s[i] != ' ' && (i == 0 || s[i - 1] == ' ')) {
                ++ans;
            }
        }
        return ans;
    }
};
1
2
3
4
5
6
7
8
9
func countSegments(s string) int {
    ans := 0
    for i, c := range s {
        if c != ' ' && (i == 0 || s[i-1] == ' ') {
            ans++
        }
    }
    return ans
}

评论