【位运算】Leetcode 判定字符是否唯一

题目解析

在这里插入图片描述


算法讲解

正常思路:使用unordered_map判断并保存每一个字符出现的次数,如果当前的字符在添加到Hash之前已经出现了一次了,直接返回false,反之循环结束返回true

优化思路:可以使用位图来充当Hash表,过程中只需要判断某一位是否为1,将某一位置1的操作

小优化:因为题目上解释只有小写字母,所以如果当前的str.size() > 24 的话,说明一定有重复字符,直接return false

class Solution {
public:
    bool isUnique(string str) {
    	if(str.size() > 24) return false;
        int hash = 0;
        //位图  保存每个字符串出现的次数  0:没有出现  1:出现过
        for(auto ch : str)
        {
            int index = ch - 'a';
            if((1 << index) & hash)return false;
            hash |= (1 << index);
        }
        return true;
    }
};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值