回文算法的时空复杂度

时间:2015-09-06 19:07:56

标签: java algorithm time complexity-theory palindrome

以下用于在Java中查找回文的代码的时间和空间复杂度是什么:

    public static boolean isPalindrome(String str) {
        return str.equals(new StringBuilder(str).reverse().toString());
    }

我知道reverse()是O(n)。 toString()也是O(n)。 equals也是O(n)。这是否意味着此代码为O(n)?

至于空间复杂性,需要创建一个StringBuilder。我不确定它转换成字符串后会发生什么。 Java是否为转换为字符串的StringBuilder分配空间,然后忘记StringBuilder(允许它被垃圾收集器拾取)?

谢谢!

----------编辑-------------

我想知道更多关于调用isPalindrome后在堆栈上创建的内容。与例如

相比,它在空间方面的效率如何

谢谢!我仍然不太明白这段代码在空间方面的效率如何。究竟将在堆栈上创建什么?与(例如)

相比,它(在空间方面)的效率如何
public boolean palindrome2(String str) {    
        int n = str.length();
        for( int i = 0; i < n/2; i++ )
            if (str.charAt(i) != str.charAt(n-i-1)) return false;
        return true;    
}

1 个答案:

答案 0 :(得分:0)

假设所有这些操作都是O(n),我说你是对的:O(n)+ O(n)+ O(n)= 3 * O(n)(或O(3n),如果你愿意的话,那么就属于O(n)类别。

StringBuilder的内容 - 您创建了一个匿名实例,并且在方法isPalindrome结束后,没有对该对象的引用,因为它的范围仅对于此方法是本地的。所以是的,它最终将由垃圾收集器处理。很可能不会立即,但我认为这无论如何都不是你的担忧。