我在浏览破解编码面试书的解决方案时,注意到了以下问题:
实现一个算法来确定一个字符串是否都是唯一的。如果你不能使用额外的数据结构怎么办?
这是提供的解决方案之一:
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++中,初始化大小也是必要的吗?
5条答案
按热度按时间e37o9pze1#
我在想,这是因为有128个ASCII字符,但我不确定。
不可以。扩展ASCII码总共有256个字符。这就是为什么有256个字符的原因。
http://www.asciitable.com/
除了
256
给出的原因外,请注意com/注意,正如Erwin Bolwidt所说,* 代码在任何情况下都是不完整的,因为Java“字符”既不是ASCII也不是扩展ASCII,它们是“一个16位Unicode字符”,所以数组应该是新的布尔值[65536]*
pod7payv2#
扩展ASCII字符集中有2^8 = 256个字符。
在这里查看。http://www.ascii-code.com/
解答告诉你1和0只能是两个值。这就是为什么它使用了一个布尔型的原始值数组。没有初始化布尔型变量总是FALSE。
C++允许
数组的一个很好的例子:
并给出结果为:
j1dl9f463#
顺便说一句,代码是Java的。
会是
在C++中
q7solyqu4#
另一种方法是蛮力,但它不是最佳解决方案。
可以使用两个for循环,其中外部循环
内部循环就像
比较两者的价值会得出答案
此外,你可以去检查字母表,如果有一个限制,只检查26个英语字母小a到z或大写A到Z
iklwldmw5#
**
这是与以下内容相关的解决方案之一:
}