开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第 14 天,点击查看活动详情。
判断句子是否为全字母句
原题地址
全字母句 指包含英语字母表中每个字母至少一次的句子。
给你一个仅由小写英文字母组成的字符串 sentence ,请你判断 sentence 是否为 全字母句 。
如果是,返回 true ;否则,返回 false 。
示例 1:
输入:sentence = "thequickbrownfoxjumpsoverthelazydog"
输出:true
解释:sentence 包含英语字母表中每个字母至少一次。
示例 2:
输入:sentence = "leetcode"
输出:false
提示:
1 <= sentence.length <= 1000sentence由小写英语字母组成
思路分析
方法一
- 定义一个
map,存储字符串中每个字符出现的次数,以字符为key,次数为value来存储; - 循环遍历
sentence然后记录map[key]; - 最后看
key的长度是否为26,即Object.keys(map).length === 26
方法二
sentence只由小写英文字母组成,因此定义一个长度为26的数组来存储每个字符是否出现;- 循环遍历
sentence中的每个字符c,如果字符c是字母表中的第i个字母,那么说明sentence中存在这个字符,即arr[i] = true; - 然后判断
arr中的每项是否为true,这里使用的every方法。也可以使用some方法来判断arr中是否有一个为false。
AC 代码
方法一
/**
* @param {string} sentence
* @return {boolean}
*/
var checkIfPangram = function(sentence) {
const map = {}
for(let i = 0; i < sentence.length; i++) {
map[sentence[i]] = (map[sentence[i]] || 0) + 1
}
return Object.keys(map).length === 26
};
结果:
- 执行结果: 通过
- 执行用时:68 ms, 在所有 JavaScript 提交中击败了28.89%的用户
- 内存消耗:41.9 MB, 在所有 JavaScript 提交中击败了28.26%的用户
- 通过测试用例:79 / 79
方法二
/**
* @param {string} sentence
* @return {boolean}
*/
var checkIfPangram = function(sentence) {
const arr = new Array(26).fill(0)
for (let i = 0; i < sentence.length; i++) {
const c = sentence[i]
arr[c.charCodeAt() - 'a'.charCodeAt()] = true
}
return arr.every(item => item)
};
结果:
- 执行结果:通过
- 执行用时:52 ms, 在所有 JavaScript 提交中击败了97.35%的用户
- 内存消耗:41.9 MB, 在所有 JavaScript 提交中击败了26.87%的用户
- 通过测试用例:79 / 79