我很困惑有点矢量如何工作(不太熟悉位向量).这是给出的代码.有人可以带我走过这个吗?
public static boolean isUniqueChars(String str) {
int checker = 0;
for (int i = 0; i < str.length(); ++i) {
int val = str.charAt(i) - 'a';
if ((checker & (1 << val)) > 0) return false;
checker |= (1 << val);
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
特别是,checker做什么?
我正在阅读"破解编码面试"一书,我在这里遇到了一些问题,但是我需要帮助比较我对解决方案的回答.我的算法有效,但我很难理解书中的解决方案.主要是因为我不明白一些运营商在做什么.
任务是:"实现一个算法来确定一个字符串是否具有所有唯一字符.如果你不能使用其他数据结构怎么办?"
这是我的解决方案:
public static boolean checkForUnique(String str){
boolean containsUnique = false;
for(char c : str.toCharArray()){
if(str.indexOf(c) == str.lastIndexOf(c)){
containsUnique = true;
} else {
containsUnique = false;
}
}
return containsUnique;
}
Run Code Online (Sandbox Code Playgroud)
它有效,但效率如何?我看到Java中String的索引函数的复杂性是O(n*m)
以下是本书的解决方案:
public static boolean isUniqueChars(String str) {
if (str.length() > 256) {
return false;
}
int checker = 0;
for (int i = 0; i < str.length(); i++) {
int val = str.charAt(i) - 'a';
if ((checker & (1 << val)) > 0) return false;
checker …Run Code Online (Sandbox Code Playgroud) 背景:我是一名CS n00b正在通过"破解编码面试".第一个问题要求"实现一个算法来确定一个字符串是否具有所有唯一字符." 我(可能是天真的)实现如下:
def isUniqueChars2(string):
uchars = []
for c in string:
if c in uchars:
return False
else:
uchars.append(c)
return True
Run Code Online (Sandbox Code Playgroud)
作者建议以下实施:
def isUniqueChars(string):
checker = 0
for c in string:
val = ord(c) - ord('a')
if (checker & (1 << val) > 0):
return False
else:
checker |= (1 << val)
return True
Run Code Online (Sandbox Code Playgroud)
是什么让作者的实现比我的更好(FWIW,作者的解决方案是在Java中,我把它转换为Python - 是我的解决方案,不可能在Java中实现)?或者,更一般地说,解决这个问题需要什么?我采取的方法有什么问题?我假设有一些基本的CS概念(我不熟悉)很重要,有助于选择采用哪种方法解决这个问题.