Easy
题目描述
全字母句是包含英文字母表中每个字母至少一次的句子。
给你一个仅含小写英文字母的字符串 sentence,请你判断该字符串是否为全字母句。
如果是,返回 true;否则,返回 false。
示例 1:
输入:sentence = "thequickbrownfoxjumpsoverthelazydog"
输出:true
解释:sentence 包含英文字母表中每个字母至少一次。
示例 2:
输入:sentence = "leetcode"
输出:false
提示:
1 <= sentence.length <= 1000sentence由小写英文字母组成
解题思路
解题思路
这道题要求检查一个字符串是否包含英文字母表中的所有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个字符,为常数空间 |