LeetCode 6258.判断句子是否为全字母句(c++)

149 阅读1分钟

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

前言

从零开始学习c++,每天起码做一道leetcode题目,在此记录,希望最后能够有所收获!

一、题目描述

6258.判断句子是否为全字母句

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

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

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

  示例 1:

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

示例 2:

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

提示:

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

二、思路分析

看到这题,先开始还误解了题意,以为只要有字母就行。后来仔细一看,才发现是要26个字母至少都出现一次。

先开始想到的是类似于建立一个常量之类的类型,把26个字母都写进去,再遍历字符串,但仔细一想,漏洞太多。

又思考了一下,想到了哈希表的不重复特性,用在这里简直再合适不过了。遍历存进去,看最后哈希表中是否有26个元素即能得到最后的结果。

三、AC代码

class Solution {
public:
    bool checkIfPangram(string sentence) {
        if(sentence.size()<26){
            return false;
        }
        set<char>nums;
        for(int i=0;i<sentence.size();i++){
            nums.insert(sentence[i]);
        }
        if(nums.size()==26){
            return true;
        }
        else{
            return false;
        }
    }
};

提交排名

image.png

四、总结

看了一下别人的做法,有一种是创建长度为26的数组,这跟我这种方法大同小异。

另一种是利用二进制,还用到了左移运算符,之前刷到过用了左移运算符的题目,现在又忘了,又去了解了一下,把忘掉的东西捡起来。