算法:判定字符是否唯一(位图思想)

题目

在这里插入图片描述
链接:leetcode

思路分析

这道题目的解法太多了,主要思路还是hash,

这里讲一下简化hash表的方法,也就是我们提到的位图思想。

位图 (Bitmap) 是一种基于位操作的数据结构,用于表示一组元素的集合信息。它通常是一个仅包含0和1的数组,其中每个元素对应集合中的一个元素。位图中的每个位(或者可以理解为数组的元素)代表一个元素是否存在于集合中。当元素存在时,对应位的值为1;不存在时,对应位的值为0。

具体的讲,我们以int为例
int占四个字节,共32个bit位
我们在每个bit位都可以存数据,因为是二进制位,所以只能存0和1
在这道题目中,我们可以用0来表示字符存在,1表示字符不存在
题目中只包含小写字符,所以32个bit完全够用。

我们遍历字符串的每一个字符,
当发现字符对应的下标在位图中为1的时候,就代表字符已经存在过,返回false
否则,将其置为1,继续下一个字符的判断。

具体热河判断某一位为1,等位运算的操作,可以看之前的博客中的讲解
传送门:常见位运算技巧总结

代码

bool isUnique(string astr) {
    int bitMap = 0;

    for(auto& e:astr)
    {
        int n = e - 'a';
        if(((bitMap >> n) & 1) == 1)//已经存在了
        return false;
        bitMap |= (1 << n);//标记
    }   

    return true;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值