我有以下代碼,它使用位向量查找字符串中的唯一字符。我們假設它是一個只有小寫字母的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移位VAL(在串中的每個字符的INT表示)中並用檢查程序(初始化爲0)AND'ing的它和在else塊它中用OR。
「我們認爲這是一個ASCII字符集,只能使用小寫字母。」好吧,但是更重要的是,你使用的是Java的'String'和'char',它是Unicode小寫字母[Basic Latin](http://www.unicode.org/charts/nameslist/index.html )只有字母。 'if'''throw'參數驗證模式非常適合記錄和執行假設,如果不成立,則會使算法失效。 –