あるインタビューで、特定の文字列に重複する文字が含まれているかどうかを確認するように依頼されました。この質問についてグーグルで検索すると、ビット操作を使用する質問について知りました。
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);
2 番目の疑問は、文字列が長すぎるか、Unicode (2 バイト幅の文字) が含まれている場合に機能するかどうかです。