簡體   English   中英

以下方法的空間復雜度是多少?

[英]What is the space complexity of below method?

我想了解以下方法的空間復雜性。 我自己嘗試了最簡單的方法。 時間復雜度為O(n)。 在每次迭代中都重新分配一個(字符串)時,無法確定空間復雜度是O(1)還是O(n)。

    public boolean anagram2(String a, String b) {
        if (a.length() != b.length()) {
            return false;
        }

        for (int i = 0; i < a.length(); i++) {
            if (a.contains("" + b.charAt(i))) {
                a = a.replace("" + b.charAt(i), "");
            }
        }

        return a.length() == 0;
    }

您還可以解釋一下空間復雜度和輔助空間之間的區別嗎?

它們都在最后被銷毀,但是空間復雜度將是算法運行時任何時候所需的最大空間量。

您正在使用O(n)空間為每次迭代創建一個新的字符串。 一次只需要將其中一個保存在內存中,因此總的空間復雜度為O(n)

正如他們已經說過的那樣, 由於沒有使用任何其他變量 ,因此空間復雜度似乎為O(1),即使您在每次迭代中重新分配一個字符串,也不會再跟蹤前一個字符串,並且在迭代結束時將其銷毀。

編輯:@Henry評論后,我想了一下,但我同意他的說法,空間復雜度似乎為O(n),因為在每次迭代中,您都將創建一個與前一個字符串有關的可變長度的新字符串並將其分配到一個變量。

但是,我想指出的是,時間復雜度不是您所說的O(n)。 即使您有一個循環,包含和替換的方法也不會只花費O(1),此類方法會在整個字符串上搜索/工作,因此,每次使用一個,它都會花費O(a),其中a是該方法正在處理的字符串的長度。 因此,成本更接近O(n * n)

通常我記得,對字符串的搜索,替換,求和運算不花費O(1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM