【发布时间】:2013-10-21 00:11:01
【问题描述】:
我正在阅读“Cracking the Coding Interview”一书,在这里我遇到了一些要求答案的问题,但我需要帮助来比较我的答案和解决方案。我的算法有效,但我很难理解书中的解决方案。主要是我不明白一些运营商到底在做什么。
任务是:“实现一个算法来确定一个字符串是否具有所有唯一字符。如果你不能使用额外的数据结构怎么办?”
这是我的解决方案:
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;
}
它有效,但它的效率如何?我看到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 |= (1 << val);
}
return true;
}
我对解决方案不太了解的几件事。首先,“|=”运算符是做什么的?为什么要从字符串中的当前字符中减去“a”以获得“val”的值?我知道“(checker & (1<<val)) 是做什么的?我知道它是按位的,但我不理解它,因为我不理解 checker 获取值的行。
我只是不熟悉这些操作,不幸的是这本书没有给出解决方案的解释,可能是因为它假设你已经理解了这些操作。
【问题讨论】:
-
我知道 Google 会过滤掉特殊字符,但您可以使用 symbolhound.com 来执行相当于 Google 搜索
|=或&等特殊字符的操作。 -
@levininja 哇比你厉害多了。无法在谷歌上搜索它让我发疯。我希望我能想到谷歌搜索“如何使用特殊字符进行搜索”大声笑
-
道德:不要相信你读到的一切。答案不一定是对的,甚至是好的,仅仅因为它出现在一本书中。 :-)
-
请在发布答案之前仔细阅读问题!这个问题提出了一些非常具体的问题。 这里不是让您放弃自己尝试实施此算法的地方。此类答案将被删除。如果您正在寻找有关如何改进自己的工作代码的建议,请访问Code Review。
标签: java string algorithm big-o time-complexity