问题在于破解代码访谈:实现一种算法来确定字符串是否具有所有唯一字符。这是解决方案:
public class ASCII {
public static boolean isUnique (String str) {
boolean[] charSet = new boolean[256];
for (int i = 0; i < str.length(); i++) {
int val = str.charAt(i);
if (charSet[val]) {
return false;
}
charSet[val] = true;
}
return true;
}
public static void main(String[] args) {
String[] words = {"abcde", "hello"};
for (String word : words) {
System.out.println(word + ":" + isUnique(word));
}
}
}
我有一个非常基本的问题,为什么要创建长度为256的charSet?因为基于ASCII图表(http://www.techonthenet.com/ascii/chart.php),我认为我们只需要127个数字来表达所有字符。谢谢!
答案 0 :(得分:4)
因为有扩展的ASCII
http://en.wikipedia.org/wiki/Extended_ASCII
128-255代码编码特定于文化的字符。
如果您想要考虑所有Unicode值,您应该这样做:
boolean[] charSet = new boolean[Character.MAX_VALUE + 1];
而不是你现在做的事情。
答案 1 :(得分:0)
此解决方案不正确。 Java String可以使用65536个字符。面试问题没有说明ASCII
答案 2 :(得分:0)
我也在研究这个问题并且有同样的问题。这是解决方案
if (str.length() > 128) {
return false;
}
boolean[] char_set = new boolean[128];
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;
}