【问题标题】:Time and Space Complexity of Palindrome Algorithm回文算法的时空复杂度
【发布时间】:2015-12-02 08:00:15
【问题描述】:

以下代码在Java中查找回文的时间和空间复杂度是多少:

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

我知道 reverse() 是 O(n)。 toString() 也是 O(n)。等于也是 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;    
}

【问题讨论】:

    标签: java algorithm time complexity-theory palindrome


    【解决方案1】:

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

    StringBuilder 发生了什么 - 你创建了一个匿名实例,在方法 isPalindrome 结束后,没有对该对象的引用,因为它的作用域仅对该方法是本地的。所以是的,它最终会被垃圾收集器处理。很可能不会立即发生,但我认为这与您无关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多