方法3(動態規劃)[接受]最長迴文子串澄清
爲了提高在蠻力解決方案,我們首先觀察我們如何能夠 避免不必要的重新計算,而驗證迴文。 考慮「ababa」這個案例。如果我們已經知道 'bab''是一個迴文,很顯然''ababa''必須是迴文,因爲這兩個字母是相同的左右兩端 。
這將產生直接的DP解決方案,這是我們首先初始化 了一個和兩個字母迴文,並一步奮鬥找到所有 三個字母迴文,等等...
複雜性分析
時間複雜度:O(n^2)這給我們提供了一個運行時間爲O(n^2)的複雜度爲 。
空間複雜度:O(n^2)。它使用O(n^2)空間 來存儲表格。
我在網上閱讀了上述解決方案以解決這個問題,並且對它有一些疑問(如果這不是正確的論壇發佈請讓我知道)。這是我對如何解決這個問題的理解:保存所有的一字節迴文。然後對於其中的每一個,如果左邊的char等於右邊的char,則保留它。如果不符合該條件,請停止處理此子字符串。繼續直到結束。
這是正確的嗎?如果是這樣,這是如何轉化爲O(N^2)算法?是否是因爲在最壞的情況下,我們必須通過字符串N遍來逐一遞增每個可能的迴文。這部分對我來說並不直觀。
爲什麼迴文O(1)的驗證步驟?它不需要遍歷潛在迴文的字符嗎? – Sunny
@Sunny由於您使用DP驗證了迴文,您已經知道長度爲'n'的子字符串是迴文並且基於此驗證長度爲'n + 2'的子字符串是迴文。所以一個驗證步驟只需要比較兩個字符,即'O(1)'。 – Paul