前言:位运算的方法大多比较抽象,很难想到。
一:判断字符是否唯一
题目要求:
解题思路:
法一:使用hash的思想,统计每一个字母出现的次数,再通过一次循环遍历查询是否有超过1的字母,有就返回false,没有返回true
法二:位运算(此处利用位图的思想)。字母一共只有26个,而一个int型整数有32个bit位,因此完全能够通过一个 int型整数的不同位 来充当hash表来统计每个字母出现的次数,想法和法一类似,只不过是通过位图的思想来实现
实现代码:
bool isUnique(string astr) {
int Bit_Count = 0;
for(auto s : astr)
{
if(((Bit_Count >> (s-'a')) & 1) == 1)
{
return false;
}
else{
Bit_Count |=(1<<s-'a');
}
}
return true;
}