分类:字符串 - 单词
题目描述:
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
请注意,你可以假定字符串里不包括任何不可打印的字符。
解题思路1:直接用split分割,然后统计个数
class Solution: def countSegments(self, s: str) -> int: if len(s) == 0 : return (0) else: return (len(s.split()))
时间复杂度 :O(n)。
这里用到的内置函数(无论是 Java 还是 Python)的时间复杂度或为 O(n),或为O(1) ,故整个算法可以在线性复杂度内完成。
空间复杂度 : {O}(n)。
split 函数 (不管哪种语言) 返回长度为 {O}(n)的数组/列表,故算法使用线性的额外空间。
解题思路2:
计算单词的数量,就等同于计数单词开始的下标个数。因此,只需要定义好下标的条件,就可以遍历整个字符串,检测每个下标。定义如下:若该下标前为空格(或者为初始下标),且自身不为空格,则其为单词开始的下标。该条件可以以常数时间检测。最后,返回满足条件的下标个数。
不在首位的一个空格对应一个单词。
class Solution: def countSegments(self, s: str) -> int: num = 0 for i in range(len(s)): if (i ==0 or s[i]==' ' ) and s[i-1] != ' ': num += 1 return num
时间复杂度 : O(n)。
对每个下标进行常数时间的检测。
空间复杂度 : {O(1)。
只使用了额外的几个整数,因此使用的空间为常数。