标签: 字符串
难度: Easy
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
请注意,你可以假定字符串里不包括任何不可打印的字符。
示例:
输入: "Hello, my name is John" 输出: 5 解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。
标签: 字符串
难度: Easy
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
请注意,你可以假定字符串里不包括任何不可打印的字符。
示例:
输入: "Hello, my name is John" 输出: 5 解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。
运行时间: 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
该题解的思路是遍历字符串,用一个标志变量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
使用标志变量`flag`可以帮助我们在不必每次访问前一个字符的情况下,确定当前是否处于单词内。这种方法简化了逻辑,并在处理字符串开始时提供了方便,因为此时没有前一个字符可供检查。此外,使用`flag`也可避免在字符串索引时发生越界错误。
该算法可以准确处理字符串以空格开始或结束的情况。在算法中,如果字符串以空格开始,由于初始`flag`为0,遇到的空格不会影响单词计数,直到遇到第一个非空格字符,`flag`才会变更并开始新单词的计数。如果字符串以空格结束,这些空格同样不会影响单词计数,因为它们发生在单词后,且`flag`会在遇到空格时被重置为0。
是的,算法能正确处理字符串中连续多个空格的情况。在该算法中,连续的空格不会影响单词计数,因为每遇到一个空格字符时,`flag`都被设置为0,只有当遇到非空格字符且`flag`为0时才开始新单词的计数。因此,不论有多少连续空格,它们都只会被视为单词间的分隔,而不会引起额外的单词计数。
是的,此算法需要调整以正确处理包含制表符、换行符或其他空白字符的情况。当前算法只考虑了空格字符作为单词间的分隔符。为了使算法适用于其他类型的空白字符,我们需要修改条件检查,使用更通用的空白字符检测方法,如使用Python的`str.isspace()`方法来判断当前字符是否为空白字符。