1832. 判断句子是否为全字母句
来源第 237 场周赛 Q1难度简单分数1166
题目描述
全字母句 指包含英语字母表中每个字母至少一次的句子。
给你一个仅由小写英文字母组成的字符串 sentence ,请你判断 sentence 是否为 全字母句 。
如果是,返回 true ;否则,返回 false 。
示例 1:
输入:sentence = "thequickbrownfoxjumpsoverthelazydog" 输出:true 解释:sentence 包含英语字母表中每个字母至少一次。
示例 2:
输入:sentence = "leetcode" 输出:false
提示:
1 <= sentence.length <= 1000sentence由小写英语字母组成
解法
方法一:数组或哈希表
思考
判断句子是否包含全部 \(26\) 个小写字母。线性扫描即可,关键是如何记录出现过的字母。
把字符放入集合,最后看大小是否为 \(26\)。集合去重后长度恰好对应字母种类。
遍历字符串 sentence,用数组或哈希表记录出现过的字母,最后判断数组或哈希表中是否有 \(26\) 个字母即可。
时间复杂度 \(O(n)\),空间复杂度 \(O(C)\)。其中 \(n\) 为字符串 sentence 的长度,而 \(C\) 为字符集大小。本题中 \(C = 26\)。
1 2 3 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
方法二:位运算
思考
方法一使用哈希集合,额外空间随字符集变化。字母只有 \(26\) 个,可用整数 \(mask\) 的第 \(i\) 位标记字母 \(i\) 是否出现,最后判断是否等于 \(2^{26}-1\),空间降为常数。
我们也可以用一个整数 \(mask\) 记录出现过的字母,其中 \(mask\) 的第 \(i\) 位表示第 \(i\) 个字母是否出现过。
最后判断 \(mask\) 的二进制表示中是否有 \(26\) 个 \(1\),也即判断 \(mask\) 是否等于 \(2^{26} - 1\)。若是,返回 true,否则返回 false。
时间复杂度 \(O(n)\),其中 \(n\) 为字符串 sentence 的长度。空间复杂度 \(O(1)\)。
1 2 3 4 5 6 | |
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 | |