在采访中,我被要求检查给定的字符串有重复字符的天气。谷歌关于这个问题,我来了解一个使用位操作的问题。检查字符串中的重复字符
bool check(char*name)
{
int i;
int checker=0;
for(i=0;name[i]!=0;i++)
{
int val=name[i]-'a';
if((checker&(1<<val))>0)return false;
checker|=(1<<val);
}
return true;
}
我检查这段代码,它工作正常。但我不明白这一行背后的逻辑。
> if((checker&(1<<val))>0)return false;
> checker|=(1<<val);
第二个疑问是,如果字符串太长或包含Unicode(2字节宽字符),这将工作吗?
非常感谢真正的解释。但是你能否详细说一下小写和大写的情况。 –