【发布时间】:2017-02-12 00:03:24
【问题描述】:
我有以下代码使用位向量在字符串中查找唯一字符。我们假设它是一个仅包含小写字母的 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;
}
将 val(字符串中每个字符的 int 表示)左移 1 并与检查器(初始化为 0)进行“与”并在 else 块中进行“或”的目的是什么。
【问题讨论】:
-
"我们假设它是一个仅包含小写字母的 ASCII 字符集。"好的,但更重要的是,因为您使用的是 Java 的
String和char,它是仅带有小写 Basic Latin 字母的 Unicode 字符集。if-throw参数验证模式非常适合记录和执行假设,如果不成立,就会使您的算法无效。 -
准备就绪后,请随意选择一个答案,以便将这个问题从未回答队列中删除。