Ich habe den folgenden Code, der eindeutige Zeichen in einer Zeichenfolge mithilfe von Bitvektoren findet. Wir nehmen an, dass es sich um einen ASCII-Zeichensatz handelt, der nur aus Kleinbuchstaben besteht.Verstehen der Verwendung von Bit-Vektoren beim Auffinden von eindeutigen Zeichen in einer Zeichenfolge
Ich habe eine harte Zeit zu verstehen, die Verwendung von Bit Vektoren unten. Auch nach dem Debugging durch das Programm und nach den Änderungen durchlaufen Variablen nach jeder Schleife.
// assuming that the characters range from a-z
static boolean isUniqueBitVector(String str) {
int checker = 0;
for(int i = 0; i < str.length(); i++) {
int val = str.charAt(i) - 'a';
if((checker & (1 << val)) > 0) {
return false;
} else {
checker |= (1 << val);
}
}
return true;
}
Was ist der Zweck von links die val (int Darstellung jeden Zeichen in string) um 1 Verschieben und verUNDen es mit Prüfer (initialisiert auf 0) und im anderen Block OR-.
"Wir nehmen an, es ist ein ASCII-Zeichensatz mit nur Kleinbuchstaben." Okay, aber mehr auf den Punkt, da Sie Javas 'String' und' char' verwenden, ist es der Unicode-Zeichensatz mit Kleinbuchstaben [Basic Latin] (http://www.unicode.org/charts/nameslist/index.html)) nur Buchstaben. Das "if" -throw-Parametervalidierungsmuster eignet sich hervorragend zum Dokumentieren und Durchsetzen von Annahmen, die, wenn sie nicht wahr sind, Ihre Algorithmen ungültig machen. –