我在浏览破解编码面试书籍解决方案时注意到以下问题:
实现一种算法以确定字符串是否具有所有唯一字符。如果不能使用额外的数据结构怎么办?
这是提供的解决方案之一:
public static boolean isUniqueChars2(String str) {
boolean[] char_set = new boolean[256];
for (int i = 0; i < str.length(); i++) {
int val = str.charAt(i);
if (char_set[val]) return false;
char_set[val] = true;
}
return true;
}
为什么 char_set
数组初始化为 256?我在想这是因为有 128 个 ascii 字符,但我不确定。此外,这个解决方案似乎是用 Java 编写的,但如果用 C++ 完成,是否还需要初始大小?
最佳答案
I was thinking that it was because there are 128 ascii characters but I'm not sure.
没有。使用扩展的 ASCII 码,总共有 256 个字符。这就是 256 的原因。
除了256
给出的原因外,请注意com/
请注意,正如 Erwin Bolwidt 所说,代码在任何情况下都充其量是不完整的,因为 Java“字符”不是 ASCII 也不是扩展的 ASCII。它们是“一个 16 位 Unicode 字符”,所以数组应该是 new boolean[65536]
关于java - 何时用 256 初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32878514/