题解:判断字符是否唯一(位运算算法)
目录
- 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