我正在准备面试并遇到一个问题,你试图找出一个字符串是否包含所有独特的字符。
这是我提出的算法。
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循环更好,我只是将每个char与数组的其余部分进行比较。那也是O(n ^ 2)。 感谢
答案 0 :(得分:0)
containsKey
的{{3}}和time requirement in TreeMap is O(log n)。这使得算法的时间成本为O(n log n)。由于您不需要地图中的值,因此可以使用Set,例如相反,使用HashSet或TreeSet。
如果你不想在找到第一场比赛之前分配O(σ)记忆(即字母表的大小),那么将每个字符与字符串的其余部分进行比较会更好。