这种独特字符串算法的时间复杂性

时间:2015-03-17 19:53:25

标签: string algorithm hashmap

我正在准备面试并遇到一个问题,你试图找出一个字符串是否包含所有独特的字符。

这是我提出的算法。

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)。 感谢

1 个答案:

答案 0 :(得分:0)

containsKey的{​​{3}}和time requirement in TreeMap is O(log n)。这使得算法的时间成本为O(n log n)。由于您不需要地图中的值,因此可以使用Set,例如相反,使用HashSet或TreeSet。

如果你不想在找到第一场比赛之前分配O(σ)记忆(即字母表的大小),那么将每个字符与字符串的其余部分进行比较会更好。