句子中的最多单词数

标签: 数组 字符串

难度: Easy

一个 句子 由一些 单词 以及它们之间的单个空格组成,句子的开头和结尾不会有多余空格。

给你一个字符串数组 sentences ,其中 sentences[i] 表示单个 句子 。

请你返回单个句子里 单词的最多数目 。

示例 1:

输入:sentences = ["alice and bob love leetcode", "i think so too", "this is great thanks very much"]
输出:6
解释:
- 第一个句子 "alice and bob love leetcode" 总共有 5 个单词。
- 第二个句子 "i think so too" 总共有 4 个单词。
- 第三个句子 "this is great thanks very much" 总共有 6 个单词。
所以,单个句子中有最多单词数的是第三个句子,总共有 6 个单词。

示例 2:

输入:sentences = ["please wait", "continue to fight", "continue to win"]
输出:3
解释:可能有多个句子有相同单词数。
这个例子中,第二个句子和第三个句子(加粗斜体)有相同数目的单词数。

提示:

  • 1 <= sentences.length <= 100
  • 1 <= sentences[i].length <= 100
  • sentences[i] 只包含小写英文字母和 ' ' 。
  • sentences[i] 的开头和结尾都没有空格。
  • sentences[i] 中所有单词由单个空格隔开。

Submission

运行时间: 21 ms

内存: 16.1 MB

class Solution:
    def mostWordsFound(self, sentences: List[str]) -> int:
        max_words = 0
        for sentence in sentences:
            words = sentence.split()  # 使用空格将句子拆分成单词列表
            num_words = len(words)  # 计算当前句子的单词数目
            max_words = max(max_words, num_words)  # 更新最大单词数目
        return max_words

Explain

这个题解通过遍历每个句子,使用字符串的split方法来分割每个句子成单词列表,然后获取列表的长度来确定句子中的单词数量。每次遍历时,都会用一个变量max_words来保持迄今为止发现的最大单词数。最终,max_words将包含所有句子中的最大单词数,并将其返回。

时间复杂度: O(n)

空间复杂度: O(1)

class Solution:
    def mostWordsFound(self, sentences: List[str]) -> int:
        max_words = 0  # 初始化最大单词数为0
        for sentence in sentences:  # 遍历每个句子
            words = sentence.split()  # 使用空格将句子拆分成单词列表
            num_words = len(words)  # 计算当前句子的单词数目
            max_words = max(max_words, num_words)  # 更新最大单词数目
        return max_words  # 返回最大单词数

Explore

split方法默认使用空格作为分隔符来拆分字符串。在处理包含复合词或具有不规则空格(如多个连续空格)的句子时,它仍可以工作,但可能不会按预期方式处理所有情况。例如,多个连续空格会在结果中生成空字符串作为额外的元素。对于不同语言,如使用非空格分隔符的语言,标准的空格分割可能不会正确拆分所有单词。因此,split方法在面对复杂文本结构时可能需要适当的修改或使用更复杂的文本处理技术。

此算法使用split()方法在没有指定分隔符的情况下默认处理字符串,它可以自动忽略句子开头和结尾的空格,并将连续的空格视为一个分隔符。因此,即使句子中有多余的空格,算法也能正确地计算出单词数量,不会因多余空格而增加错误的单词计数。

此算法的时间复杂度主要取决于句子的数量及每个句子的长度。在每次迭代中,算法都需要分割句子并计算单词数量,因此总体时间复杂度为O(n*m),其中n是句子数量,m是句子平均长度。对于非常大的数据集,这种方法的效率可能会受到影响,特别是当内存资源有限时。在这种情况下,可以考虑使用并行处理或优化数据结构来处理大规模数据。

在这种情况下,使用max函数是一种简单且直接的方法来更新最大单词数。它在每次迭代中比较当前句子的单词数和当前记录的最大值,这保证了代码的简洁性和易读性。虽然我们可以使用其他数据结构,如优先队列等来跟踪最大值,但这些方法会增加代码复杂度,且在这个特定场景下,性能提升不明显,因此使用max函数是一个既实用又高效的选择。