3

文字列の重複を検出するこのコードを理解するのに問題があります。

int checker = 0;
    for(char ch : seed.toCharArray()){
        int val = ch - 'a';
        System.out.println(val);
        if ((checker & (1 << val)) > 0){ 
            // duplicate found
            break;
        }
        checker |= (1 << val);
    }

誰かがこれがどのように機能するかの例で私を説明できますか?

4

2 に答える 2

3

わかりました、例えばch = 'c'

int val = 'c' - 'a' = 2; //The char value for 'c' is two greater that that for 'a'

次に、状態を評価しifます。

1 << 2

「1を2桁左にシフトする」という意味で、2進数の100または10進数の4になります。

checker & 4

チェッカー間の「ビット単位および」を意味します。つまり、その特定のビットがすでに設定されているかどうかを確認します。

ビットが設定されている場合は完了です。それ以外の場合は実行します

c |= 4

これは「c=c | 4」を意味します。これはビット単位であるか、「c」に対応するビットを1に設定します。

于 2012-07-17T08:00:23.767 に答える
0

ビットマップとして使用checkerしているようです。「a」の場合はビット0、「b」の場合はビット1などです。文字がすでに設定されているかどうかを確認し、設定され(checker & (1 << val)) > 0ていない場合は設定します。checker |= (1 << val)

于 2012-07-17T07:53:56.447 に答える