Pau*_*aul 3 java operators bit-shift
我不理解循环中的行:我们取字符并减去a,所以"10"?(为什么?)
然后1 << val:我们用val换1?(为什么?)
和检查器是0,那么我们如何达到> 0这个条件?
public static boolean isUniqueChars(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;
checker |= (1 << val);
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
谢谢
代码假定str由小写字母组成,如果没有重复字母则返回true.它的工作原理如下:
checker用作位图,也就是说,此变量中的每个位用于跟踪一个字母.从字符中减去"a"给出'a'为0,为'b'为1,为'c'为2等.将此数字左移1为'a',2为'b',4为'c' '等
通过oring(|),该值与checker代码一起跟踪以前遇到的字符.所以,如果我们遇到第二个'a',例如,checker它是第一个位设置(&在if语句中测试),所以我们知道它str有重复.
简而言之,checker用作更快更紧凑的bool阵列.这种和类似的技术称为位操作.
| 归档时间: |
|
| 查看次数: |
1657 次 |
| 最近记录: |