题解:判断字符是否唯一(位运算算法)
目录
- 1.题目
- 2.题解
- 3.位图参考代码
- 4.细节
- 5.总结
1.题目
题目链接:LINK
 
2.题解
题解有两种方法,
 一是做一个哈希数组,去查重;
 二是直接用一个变量每一位来对应表示是否有这个字母即可(位图算法)。
下面仅说位图算法:
 
3.位图参考代码
class Solution {
public:
    bool isUnique(string astr) 
    {
        if(astr.length() > 26) return false;// 鸽巢原理
        
        int ret = 0;//32个比特位全是0
        for(auto& ch : astr)
        {
            int n = ch - 'a';
            
            // 查重
            if(((ret >> n) & 1) == 1) return false;
            // 加入ret中
            ret = (ret | (1 << n));
        }
        return true;
    }
};
4.细节
鸽巢原理:
 这里如果一个string的长度 > 26 且 都为小写字母的话,那么一定有重复的,所以可以不用判断直接返回false。
5.总结
用位图比哈希数组更加节约空间,直接把O(N)的空间复杂度降成了O(1)…
EOF



















