字符串中的单词数

标签: 字符串

难度: Easy

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

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

示例:

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

Submission

运行时间: 20 ms

内存: 16.0 MB

class Solution:
    def countSegments(self, s: str) -> int:
        word=0
        flag=0        
        if len(s)==0:
            return word
        else:
            for i,j in enumerate(s):
                if j != ' ' and flag==0:
                    word+=1
                    flag=1
                elif j==' ':
                    flag=0
                else:
                    continue            
        return word

Explain

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

时间复杂度: O(n)

空间复杂度: O(1)

class Solution:
    def countSegments(self, s: str) -> int:
        word = 0  # 单词计数
        flag = 0  # 标志变量,表示当前是否在单词内
        
        if len(s) == 0:
            return word
        else:
            for i, j in enumerate(s):
                if j != ' ' and flag == 0:  # 遇到新单词
                    word += 1
                    flag = 1
                elif j == ' ':  # 遇到空格
                    flag = 0
                else:  # 还在当前单词内
                    continue            
        return word

Explore

使用标志变量`flag`可以帮助我们在不必每次访问前一个字符的情况下,确定当前是否处于单词内。这种方法简化了逻辑,并在处理字符串开始时提供了方便,因为此时没有前一个字符可供检查。此外,使用`flag`也可避免在字符串索引时发生越界错误。

该算法可以准确处理字符串以空格开始或结束的情况。在算法中,如果字符串以空格开始,由于初始`flag`为0,遇到的空格不会影响单词计数,直到遇到第一个非空格字符,`flag`才会变更并开始新单词的计数。如果字符串以空格结束,这些空格同样不会影响单词计数,因为它们发生在单词后,且`flag`会在遇到空格时被重置为0。

是的,算法能正确处理字符串中连续多个空格的情况。在该算法中,连续的空格不会影响单词计数,因为每遇到一个空格字符时,`flag`都被设置为0,只有当遇到非空格字符且`flag`为0时才开始新单词的计数。因此,不论有多少连续空格,它们都只会被视为单词间的分隔,而不会引起额外的单词计数。

是的,此算法需要调整以正确处理包含制表符、换行符或其他空白字符的情况。当前算法只考虑了空格字符作为单词间的分隔符。为了使算法适用于其他类型的空白字符,我们需要修改条件检查,使用更通用的空白字符检测方法,如使用Python的`str.isspace()`方法来判断当前字符是否为空白字符。