Easy

题目描述

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

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

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

示例 1:

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

示例 2:

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

提示:

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

解题思路

解题思路

这道题要求检查一个字符串是否包含英文字母表中的所有26个字母。有几种常见的解法:

方法一:哈希表/集合法 遍历字符串,将每个字符加入集合中,最后检查集合大小是否为26。这种方法简单直观,时间复杂度为O(n)。

方法二:布尔数组法 使用长度为26的布尔数组,遍历字符串时标记对应字母已出现,最后检查是否所有位置都为true。

方法三:位掩码法 使用一个32位整数作为位掩码,每一位代表一个字母是否出现。这种方法空间效率最高。

推荐解法:集合法,代码简洁且易于理解。对于这道题的数据规模,各种方法的性能差异不大,应优先考虑代码的可读性。

核心思想是记录已出现的字符,当不同字符数量达到26时,说明是全字母句。

代码实现

class Solution {
public:
    bool checkIfPangram(string sentence) {
        unordered_set<char> seen;
        for (char c : sentence) {
            seen.insert(c);
            if (seen.size() == 26) {
                return true;
            }
        }
        return false;
    }
};
class Solution:
    def checkIfPangram(self, sentence: str) -> bool:
        return len(set(sentence)) == 26
public class Solution {
    public bool CheckIfPangram(string sentence) {
        HashSet<char> seen = new HashSet<char>();
        foreach (char c in sentence) {
            seen.Add(c);
            if (seen.Count == 26) {
                return true;
            }
        }
        return false;
    }
}
/**
 * @param {string} sentence
 * @return {boolean}
 */
var checkIfPangram = function(sentence) {
    return new Set(sentence).size === 26;
};

复杂度分析

复杂度类型大小说明
时间复杂度O(n)需要遍历字符串,n为字符串长度
空间复杂度O(1)集合最多存储26个字符,为常数空间