力扣(LeetCode)1832. 判断句子是否为全字母句(C++)

哈希集合1

哈希集合记录 26 26 26 个字母是否出现,一次遍历字符串,维护哈希集合,同时维护答案。遍历完成,仅当答案等于 26 26 26 ,句子是全字母句。

class Solution {
public:
    bool checkIfPangram(string sentence) {
        bool st[26] = {0};
        int ans = 0;
        for(auto &c:sentence){
            if(!st[c-'a']) ans++;
            st[c-'a'] = true;
        }
        if(ans<26) return false;
        return true;
    }
};
  1. 时间复杂度 : O ( n ) O(n) O(n) n n n 是字符串长度, 遍历字符串时间复杂度 O ( n ) O(n) O(n)
  2. 空间复杂度 : O ( ∣ C ∣ ) O(|C|) O(C) ∣ C ∣ = 26 |C|=26 C=26 是小写字母总数 ,字符集的空间复杂度 O ( ∣ C ∣ ) O(|C|) O(C)
哈希集合2

一次遍历字符串,维护哈希集合。之后遍历哈希集合,维护答案,仅当答案等于 26 26 26 ,句子是全字母句。

class Solution {
public:
    bool checkIfPangram(string sentence) {
        bool st[26] = {0};
        int ans = 0;
        for(auto &c:sentence) st[c-'a'] = true;
        for(int i = 0;i < 26;i++) ans+=st[i];
        if(ans<26) return false;
        return true;
    }
};
  1. 时间复杂度 : O ( n + ∣ C ∣ ) O(n+|C|) O(n+C) n n n 是字符串长度, ∣ C ∣ = 26 |C|=26 C=26 是小写字母总数,遍历字符串和字符集时间复杂度 O ( n + ∣ C ∣ ) O(n+|C|) O(n+C)
  2. 空间复杂度 : O ( ∣ C ∣ ) O(|C|) O(C) , 字符集的空间复杂度 O ( ∣ C ∣ ) O(|C|) O(C)
位运算

将答案看成 26 26 26 位二进制串,某一位为 0 0 0 ,则没有对应字符,某一位为 1 1 1 ,则有对应字符。遍历字符串,用或运算,将每一字母的存在性"或进"答案。仅当答案 26 26 26 位全 1 1 1 ,句子是全字母句。

class Solution {
public:
    bool checkIfPangram(string sentence) {
        int ans = 0;
        for(auto &c:sentence) ans |= 1<<(c-'a');
        return ans == (1<<26) -1 ;
    }
};
  1. 时间复杂度 : O ( n ) O(n) O(n) n n n 是字符串长度, 遍历字符串时间复杂度 O ( n ) O(n) O(n)
  2. 空间复杂度 : O ( 1 ) O(1) O(1) , 只使用常量级空间 。
AC

AC

致语
  • 理解思路很重要
  • 读者有问题请留言,清墨看到就会回复的。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清墨韵染

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值