位运算-面试题01.01.判定字符是否唯一-力扣(LeetCode)
一、题目解析
1、s[i]仅包含小写字母
2、字符串的长度为[0,100]
二、算法原理
解法1:哈希表
用哈希表记录s[i]的字符,如果有重复的,则返回false
优化1:由于s[i]中只有小写字母,所以可以创建一个int hash[26]的数组,0代表字符a
解法2/优化2:位图
一个int有32个比特位,我们可以用一个比特位代表一个小写字母,‘a’用0位比特位表示,0表示字符未存在,1表示字符存在
位运算公式:
三、代码示例
class Solution {
public:bool isUnique(string astr){if(astr.size() > 26) return false;int n = 0;for(auto& e : astr){if(((n>>(e-'a')) & 1) == 1)return false;if(((n>>(e-'a')) & 1) == 0)n |= (1<<(e-'a'));}return true;}
};