У меня есть следующий код, который находит уникальные символы в строке с использованием битовых векторов. Предположим, что это набор символов ASCII с строчными буквами.Понимание использования вектора бит в поиске уникального символа в строке
У меня возникли проблемы с пониманием использования бит-векторов ниже. Даже после отладки через программу и последующие переменные переменные проходят через каждый цикл.
// 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;
}
Какова цель левого сдвига вала (ИНТ представления каждого полукокса в строке) на 1 и AND'ing его проверка (инициализируется 0) и OR'ing его в блоке еще.
«Мы предполагаем, что это набор символов ASCII с строчными буквами». Хорошо, но более того, поскольку вы используете Java 'String' и' char', это набор символов Unicode с нижним регистром [Basic Latin] (http://www.unicode.org/charts/nameslist/index.html) Только буквы. Шаблон проверки параметров 'if'-' throw' отлично подходит для документирования и принудительного применения предположений, которые, если не выполняются, недействительны для ваших алгоритмов. –