leetcode
leetcode 401 ~ 450
字符串中的单词数

字符串中的单词数

难度:

标签:

题目描述

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

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

示例:

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

代码结果

运行时间: 20 ms, 内存: 16.0 MB


/**
 * 思路:
 * 使用Java Stream API来解决这个问题。首先用正则表达式拆分字符串,然后使用流来过滤空字符串,最后计算单词个数。
 */
import java.util.Arrays;
 
public class Solution {
    public long countSegments(String s) {
        return Arrays.stream(s.split(" "))
                .filter(str -> !str.isEmpty())
                .count();
    }
}

解释

方法:

该题解的思路是遍历字符串,用一个标志变量flag来记录当前是否处于一个单词内。如果当前字符不是空格且flag为0,说明遇到了一个新单词,word计数加1,并将flag置为1。如果当前字符是空格,则将flag置为0。如果当前字符不是空格且flag为1,说明还在当前单词内,不做操作。最后返回word即可得到单词数量。

时间复杂度:

O(n)

空间复杂度:

O(1)

代码细节讲解

🦆
为什么需要使用标志变量`flag`来跟踪是否位于单词内,而不是直接通过检查前一个字符是否为空格来判断?
使用标志变量`flag`可以帮助我们在不必每次访问前一个字符的情况下,确定当前是否处于单词内。这种方法简化了逻辑,并在处理字符串开始时提供了方便,因为此时没有前一个字符可供检查。此外,使用`flag`也可避免在字符串索引时发生越界错误。
🦆
在这个算法中,如果字符串以空格开始或结束,这对单词计数有什么影响?算法是否能准确处理这种情况?
该算法可以准确处理字符串以空格开始或结束的情况。在算法中,如果字符串以空格开始,由于初始`flag`为0,遇到的空格不会影响单词计数,直到遇到第一个非空格字符,`flag`才会变更并开始新单词的计数。如果字符串以空格结束,这些空格同样不会影响单词计数,因为它们发生在单词后,且`flag`会在遇到空格时被重置为0。
🦆
算法是否能正确处理字符串中连续多个空格的情况,这些空格是否会影响单词的计数结果?
是的,算法能正确处理字符串中连续多个空格的情况。在该算法中,连续的空格不会影响单词计数,因为每遇到一个空格字符时,`flag`都被设置为0,只有当遇到非空格字符且`flag`为0时才开始新单词的计数。因此,不论有多少连续空格,它们都只会被视为单词间的分隔,而不会引起额外的单词计数。
🦆
如果输入字符串包含其他空白字符(如制表符或换行符),此算法是否需要调整?
是的,此算法需要调整以正确处理包含制表符、换行符或其他空白字符的情况。当前算法只考虑了空格字符作为单词间的分隔符。为了使算法适用于其他类型的空白字符,我们需要修改条件检查,使用更通用的空白字符检测方法,如使用Python的`str.isspace()`方法来判断当前字符是否为空白字符。

相关问题