2015-09-06 37 views
1

什麼是下面的代碼在Java尋找回文的時間和空間複雜度:()迴文算法的時間和空間複雜

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

我知道逆轉爲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;  
} 

回答

0

假設所有這些操作都真正爲O(n),我說你是對的:O(N)+ O(N )+ O(n)= 3 * O(n)(或O(3n),如果你願意的話),然後降到O(n)類。

什麼是StringBuilder - 您創建了一個匿名實例,並且在方法isPalindrome結束後,沒有對該對象的引用,因爲其作用域僅適用於此方法。所以是的,它最終將被垃圾收集器處理。最有可能不會立即,但我認爲這不關你的事。