文字列は、すべてのユニークな文字が含まれているかどうかをチェック

アビ・パテル:

// O(N) - 追加のデータ構造を持ちません...

private boolean isUniqueWithoutDS(String str){
    boolean value = true;

    int checker = 0;

    for (int i = 0; i < str.length(); i++) {
        int c = str.charAt(i) - 'a';
        System.out.println("checker is : " + checker);
        System.out.println("1<<c is " + (1<<c));   
        if((checker & (1 << c))>0){
            value = false;
            break;
        }
        checker = checker | 1<<c;
    }

    return value;
}

これは、私はそれが大文字と小文字を組み合わせた文字列のためにどのように機能するかを理解することはできませんよ、私のコードと作品の罰金です。たとえば、「Zizu」それは動作します。それが動作し、私はそれが同様にどのように動作するかを知っているすべての小さな文字入りの文字列の場合。

アンドレアス:

まあ、答えは言語に依存するが、Javaで(JLSかもしれ15.19演算子をシフトします。):

左側の促進タイプはオペランドである場合int、次に、右側の5つだけ最下位ビットは、オペランドのシフト距離として使用されます。右側のオペランドをビット単位に供したかのように、論理AND演算子である&マスク値を用いて(§15.22.1) ()。0x1f 0b11111実際に用いられるシフト距離の範囲で、常にそのためである031包括的、。

あなたが実行に似ている、それはそうc = c & 0x1f、またはc = c % 32大文字の両方ので、Aと小文字がaなりcの価値0の目的のために、<<オペレータ。

私は他の言語は、32ビットのため、同様に動作することができると仮定したいintタイプ。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=316267&siteId=1