首页 > 编程语言 >【C++算法】33.位运算_判定字符是否唯一

【C++算法】33.位运算_判定字符是否唯一

时间:2024-12-08 13:29:21浏览次数:8  
标签:11 字符 26 false 33 C++ bitMap 算法 astr

文章目录


题目链接:

面试题 01.01. 判定字符是否唯一


题目描述:

031edc88ceea9fcd5f44bbc2e1c7e694


解法

如果使用数据结构的话

  1. 哈希表:

一个一个字符扫描,不在哈希表里面的就放进去,在里面的就返回false。扫描完全部不重复就返回true

也可以优化一下,字母一共26个,可以搞个数组hash[26]


位图

可以用2601来表示,0表示没出现过,1表示出现过。

优化:

使用位图前检查字母长度是不是>26,是的话就直接返回false

430cccde5b12df31ca797dcbdf9db81a


C++ 算法代码:

class Solution 
{
    public:
    bool isUnique(string astr) 
    {
        // 利用鸽巢原理来做的优化
        if(astr.size() > 26) return false; 
        int bitMap = 0;
        for(auto ch : astr)
        {
            int i = ch - 'a';
            // 先判断字符是否已经出现过
            if(((bitMap >> i) & 1) == 1) return false;
            // 把当前字符加入到位图中
            bitMap |= 1 << i;
        }
        return true;
    }
};

图解

例如:s = "leetcode"

  1. astr.size() < 26

    bitMap就是位图,初始化为0,表示所有字符都尚未出现。

    进入循环,

    字符 ‘l’ 对应的索引 i = 'l' - 'a' = 11。
    检查 bitMap 的第 11 位:
    bitMap = 0,第 11 位为 0
    将第 11 位置为 1
    bitMap = 0 | (1 << 11) = 2048。

  2. 进入循环,

    字符 ‘e’:
    字符 ‘e’ 对应的索引 i = 'e' - 'a' = 4。
    检查 bitMap 的第 4 位:
    bitMap = 2048,第 4 位为 0
    将第 4 位置为 1
    bitMap = 2048 | (1 << 4) = 2112。

  3. 进入循环,

    字符 ‘e’:
    字符 ‘e’ 对应的索引 i = 'e' - 'a' = 4。
    检查 bitMap 的第 4 位:
    bitMap = 2112,第 4 位为 1(之前已经设置为1)。
    发现重复字符 e,函数返回 false

标签:11,字符,26,false,33,C++,bitMap,算法,astr
From: https://blog.csdn.net/hlyd520/article/details/144324873

相关文章

  • 【C++算法】34.位运算_丢失的数字
    文章目录题目链接:题目描述:解法C++算法代码:题目链接:268.丢失的数字题目描述:解法哈希表创建一个0~5的数组从前往后遍历一下,有的数字就在表里面标记一下,最后看一下哪些数字没有被标记过。高斯求和先求出应该有的和:(首项+末项)*项数÷2然后减去数组的和......
  • 关于c++的一个报错
    使用tstring构造函数,用到了VarBaseString的tostring,调用完,会导致局部对象指针为nullptr,目前在查原因classVarBaseString:publicVar{public:VarBaseString(std::stringstr=""){val=str;type="string";......
  • 机器学习(4)Kmeans算法
    1、简述聚类分析的重要性及其在机器学习中的应用  聚类分析,作为机器学习领域中的一种无监督学习方法,在数据探索与知识发现过程中扮演着举足轻重的角色。它能够在没有先验知识或标签信息的情况下,通过挖掘数据中的内在结构和规律,将数据对象自动划分为多个类别或簇。每个簇内的......
  • 算法日记 43-44 day 图论(深搜,广搜)
    直接看题目,还是熟悉写法。题目:孤岛的总面积101.孤岛的总面积(kamacoder.com)题目描述给定一个由1(陆地)和0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛屿。现在......
  • 地平线 bev 参考算法板端一致性验证教程
    01前言由于部署时数据来源的硬件不同以及应用开发的高效性要求,往往会使得在板端部署阶段的数据准备操作与训练时有所差异,导致在同样的输入下,量化模型的输出结果和板端部署模型的输出结果不一致。本文将基于开发者社区中已经发布的地平线bev参考算法板端输入数据准备教程,以be......
  • 斐波那契数列c++
    意大利数学家斐波那契(LeonardoFibonacci)是12、13世纪欧洲数学界的代表人物。他提出的“兔子问题”引起了后人的极大兴趣。“兔子问题”假定一对大兔子每一个月可以生一对小兔子,而小兔子出生后两个月就有繁殖能力,问从一对小兔子开始,n个月后能繁殖成多少对兔子?输入格式:首先......
  • 【推荐算法】推荐系统中的单目标精排模型
    前言:推荐系统中模型发展较快,初学者【也就是笔者】很难对模型进行一个系统的学习。因此,这篇文章总结了王树森中的视频以及《深度学习推荐系统》中的单目标精排模型,绘制了一个单目标精排模型的思维导图来帮助初学者【笔者】更好的学习。在后面的学习过程中,会加入更多的单目标......
  • 学习王宏志老师《大数据算法》PPT
    哈尔滨工业大学王宏志老师《大数据算法》                                                        ......
  • 最小栈算法
    介绍        最小栈,即具有栈的基本功能,同时可以用O(1)的时间复杂度取出栈中最小值题目链接:155.最小栈-力扣(LeetCode)设计一个支持push,pop,top操作,并能在O(1)时间内检索到最小元素的栈。实现MinStack类:MinStack()初始化堆栈对象。voidpush(intval)......
  • 计算机视觉算法详解
    文章目录计算机视觉算法详解一、引言二、计算机视觉算法核心步骤1、图像获取2、预处理2.1、去噪3、特征提取3.1、边缘提取三、深度学习在计算机视觉中的应用1、卷积神经网络(CNN)四、使用示例五、总结计算机视觉算法详解一、引言计算机视觉作为人工智能领域的......