在一次采访中,我被要求检查天气给定的字符串是否有重复的字符。谷歌搜索这个问题,我了解到一个使用位操作的问题。
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 字节宽的字符),这会起作用吗?