刷题的日常-判断句子是否为全字母句

238 阅读2分钟

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

公司已经有人🐏了

刷题的日常-2022年12月13号

一天一题,保持脑子清爽

判断句子是否为全字母句

来自leetcode的 1832 题,题意如下:

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

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

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

示例1:

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

示例2:

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

理解题意

通过题意,我们可以将信息整理如下:

  • 题目给出一个字符串
  • 要求我们统计字符串中出现的字符
  • 如果所有的小写英文字母都出现,则称该字符串为 全字母句
  • 返回给定的字符串是否为 全字母句,是返回true,否则返回 false

做题思路

不管是英文字符还是其它字符,在计算机中都是用编码来进行标识的。既然是编码,那么就会有一个编码值。并且英文字符之间的顺序和编码顺序也是对应的,那么我们就可以用连续的数组来记录出现的位置,通过将位置进行位移保证不会越界,这道题的步骤可以整理如下。

  • 开辟一个映射数组 map 记录字母是否出现过
  • 开辟一个变量记录未出现的字母个数
  • 遍历字符串中的字符
  • 如果字符未出现,就将 未出现的次数 减一
  • 未出现的字符为0,返回true,否则返回 false

代码实现

代码实现如下:

public class Solution {
    public boolean checkIfPangram(String sentence) {
        int res = 26, c;
        boolean[] map = new boolean[26];
        for (int i = 0; i < sentence.length(); i++) {
            c = sentence.charAt(i) - 'a';
            res -= map[c] ? 0 : 1;
            map[c] = true;
            if (res == 0) {
                return true;
            }
        }
        return false;
    }
}

image.png