Ch01_Q01: 1.1是唯一的:实现算法以确定是否为字符串 拥有所有独特的角色。
我们假设这是一个ASCII字符串
From,Cracking the Coding Interview,第6版 第1章数组和字符串
答案 0 :(得分:0)
private static boolean isStringUnique(String s) {
// ASCII has only 128 unique characters
if (s.length() > 128) {
return false;
}
int[] aCharSet = new int[128];
for (int i = 0; i < s.length(); i++) {
int value = s.charAt(i);
if(aCharSet[value] > 0) {
return false;
} else {
aCharSet[value]++;
}
}
return true;
}
答案 1 :(得分:0)
这里有一些您可能会发现有用的实现。第一个是C ++,其余的是python。你上面也有一些很好的提示。在第一个Python实现中,您将看到一个集合。集合是无序集合,不包含重复元素。换句话说,集合包含所有唯一值。
bool is_unique(const std::string& s) {
if (s.size() > 128)
return false;
std::array<bool, 128> seen;
seen.fill(false);
for (char n : s) {
char current = n;
if (seen[current]) {
return false;
} else {
seen[current] = true;
}
}
return true;
}
def is_unique(string):
if len(string) == len(set(string)):
return True
else:
return False
def _is_unique(string):
if len(string) > 128:
return False
seen = [False]*128
for elem in string:
current = string.index(elem)
if seen[current]:
return False
else:
seen[current] = True
return True
def final_is_unique(str):
if len(str) > 128:
return False
seen = [False]*128
for elem in str:
current = ord(elem)
if seen[current]:
return False
else:
seen[current] = True
return True