LeetCode 每日 1 题:判断句子是否为全字母句

181 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第 14 天,点击查看活动详情

判断句子是否为全字母句

原题地址

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

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

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

示例 1:

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

示例 2:

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

提示:

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

思路分析

方法一

  1. 定义一个 map,存储字符串中每个字符出现的次数,以字符为 key,次数为 value 来存储;
  2. 循环遍历 sentence 然后记录 map[key]
  3. 最后看 key 的长度是否为 26,即 Object.keys(map).length === 26

方法二

  1. sentence 只由小写英文字母组成,因此定义一个长度为 26 的数组来存储每个字符是否出现;
  2. 循环遍历 sentence 中的每个字符 c,如果字符 c 是字母表中的第i个字母,那么说明 sentence 中存在这个字符,即 arr[i] = true
  3. 然后判断 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

END