在採訪中,我被要求檢查給定的字符串有重複字符的天氣。谷歌關於這個問題,我來了解一個使用位操作的問題。檢查字符串中的重複字符
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字節寬字符),這將工作嗎?
非常感謝真正的解釋。但是你能否詳細說一下小寫和大寫的情況。 –