我遇到一个问题,需要判断一个字符串是否包含所有独特的字符。
我写了一个解决方案,将每个字符添加到一个集合中,但是如果该字符已经存在,则返回false。
private static boolean allUniqueCharacters(String s) {
Set<Character> charSet = new HashSet<Character>();
for (int i = 0; i < s.length(); i++) {
char currentChar = s.charAt(i);
if (!charSet.contains(currentChar)) {
charSet.add(currentChar);
} else {
return false;
}
}
return true;
}
根据我正在阅读的书,这是“最优解”
public static boolean isUniqueChars2(String str) {
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;
}
我的问题是,我的实现比提供的那个实现要慢吗?我认为是,但是如果散列查找是O(1),那么它们的复杂度不是相同的吗?
谢谢。