判断句子是否为全字母句

标签: 哈希表 字符串

难度: Easy

全字母句 指包含英语字母表中每个字母至少一次的句子。

给你一个仅由小写英文字母组成的字符串 sentence ,请你判断 sentence 是否为 全字母句

如果是,返回 true ;否则,返回 false

 

示例 1:

输入:sentence = "thequickbrownfoxjumpsoverthelazydog"
输出:true
解释:sentence 包含英语字母表中每个字母至少一次。

示例 2:

输入:sentence = "leetcode"
输出:false

 

提示:

  • 1 <= sentence.length <= 1000
  • sentence 由小写英语字母组成

Submission

运行时间: 21 ms

内存: 16.0 MB

class Solution:
    def checkIfPangram(self, sentence: str) -> bool:
        return len(set(sentence))==26

Explain

该题解的核心思路是利用集合来去除字符串中的重复字符,并检查去重后的字符数量是否等于26。如果是,说明句子包含了英文字母表中的每个字母至少一次,因此是全字母句。使用集合是因为集合自动去重和高效的查找与插入能力。

时间复杂度: O(n)

空间复杂度: O(1)

class Solution:
    def checkIfPangram(self, sentence: str) -> bool:
        # 使用集合去重,并检查去重后的字符数量
        # 如果集合长度为26,说明包含所有英文字母
        return len(set(sentence)) == 26

Explore

英文字母表共有26个小写字母。当输入的字符串被转换为集合时,集合的性质会自动去除字符串中的重复字符,保留唯一的字符。因此,如果集合中的元素数量达到26,就说明输入的字符串至少包含了每一个英文字母一次,满足全字母句的条件。

在Python中,集合是基于哈希表实现的。当我们将字符串中的字符添加到集合中时,集合会使用哈希函数来计算每个元素的哈希值,并根据这个哈希值将元素存储在内部的数据结构中。如果新加入的元素与已存在的元素具有相同的哈希值(并且在比较后确认是相同的元素),则不会重复添加。这种基于哈希表的结构使得集合具有高效的查找和插入性能,从而实现快速去重。

这种实现方式的效率优势在于其简洁性和直接性。首先,通过直接构建集合并检测其大小,避免了额外的变量声明或复杂的逻辑判断步骤。其次,这种方式利用了Python语言的高级特性,减少代码量,提高可读性和维护性。从性能角度看,这种方式最大的优势在于一次性完成了去重和计数的操作,避免了多次遍历输入字符串。

该方法仍然适用,因为集合会去除所有重复的字符,并只计算唯一字符的总数。如果包含非小写英文字母的字符,这些字符同样会被添加到集合中,但不会影响到集合中英文字母的数量统计。只要集合中小写英文字母的数量为26,无论是否包含其他字符,该方法都能正确判断句子是否为全字母句。