【发布时间】:2015-05-20 10:24:48
【问题描述】:
我正在准备面试,遇到了一个问题,您尝试查找字符串是否包含所有唯一字符。
这是我想出的算法。
public static boolean isUniqueChars(String str)
{
char[] charArray = str.toCharArray();
Map<Character, Integer> charCounter = new TreeMap<Character, Integer>();
for (char i : charArray)
{
if(charCounter.containsKey(i))
return false;
else
charCounter.put(i,1);
}
return true;
}
我看到一个 for 循环,所以它至少是 O(n)。我相信在 hashmap 中的查找也是 O(n)。那么这会使我的算法变成 O(n^2) 吗?
如果它是 O(n^2),那么它比嵌套 for 循环更好,我只是将每个字符与数组的其余部分进行比较。那也是O(n ^ 2)。 谢谢
【问题讨论】:
-
如果散列结构中的查找是
O(n),则绝对没有理由使用它们,因为通过任何集合的线性搜索会找到O(n)中的所有匹配项。