アビ・パテル:
// 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
実際に用いられるシフト距離の範囲で、常にそのためである0
と31
包括的、。
あなたが実行に似ている、それはそうc = c & 0x1f
、またはc = c % 32
大文字の両方ので、A
と小文字がa
なりc
の価値0
の目的のために、<<
オペレータ。
私は他の言語は、32ビットのため、同様に動作することができると仮定したいint
タイプ。