当前位置: 首页 > news >正文

力扣(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

致语

  • 理解思路很重要
  • 读者有问题请留言,清墨看到就会回复的。

相关文章:

  • ehcache使用及缓存不生效处理方法
  • BASNet调研
  • Android Kotlin 基础知识codelab activity 和 fragment 生命周期
  • 数据结构---KMP算法
  • PHP——运算符
  • 笔试强训48天——day25
  • 有了@MapperScan就不用@Mapper了你知道嘛
  • Docker之Nacos的持久化和集群部署
  • 前端——表单相关的属性(上)
  • 【C++初阶7-stringOJ】上手用一下
  • 【Java 实战】通过ElasticSearch实现全局搜索功能
  • webgis —— 为瓦片构建缓存
  • 最惨面试季:“这么简单的9道题,我刷掉了90%的测试员。”
  • c++11 function模板:模板特化与可变参数函数模板
  • CSDN竞赛14期题解
  • 《深入 React 技术栈》
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 4. 路由到控制器 - Laravel从零开始教程
  • Cookie 在前端中的实践
  • ES6核心特性
  • Java,console输出实时的转向GUI textbox
  • JavaScript创建对象的四种方式
  • js继承的实现方法
  • MaxCompute访问TableStore(OTS) 数据
  • PHP变量
  • PHP的类修饰符与访问修饰符
  • Swift 中的尾递归和蹦床
  • vue-router的history模式发布配置
  • 基于HAProxy的高性能缓存服务器nuster
  • 记录一下第一次使用npm
  • 前端技术周刊 2019-01-14:客户端存储
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • Hibernate主键生成策略及选择
  • 第二十章:异步和文件I/O.(二十三)
  • ​2020 年大前端技术趋势解读
  • # Apache SeaTunnel 究竟是什么?
  • $.each()与$(selector).each()
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2)nginx 安装、启停
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)UDP基本编程步骤
  • (一)认识微服务
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net(C#)中String.Format如何使用
  • .NET开源快速、强大、免费的电子表格组件
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • /etc/skel 目录作用
  • @Mapper作用
  • [ IO.File ] FileSystemWatcher
  • [20181219]script使用小技巧.txt