[英]Palindrome Partitioning problem in O(N^2) time
如果S[j..i]
是回文,則該部分(從j
到i
)說明ith
有效切割(以及公式中的+ 1
)。 由於我們已經為這次迭代修復了一個有效的ith
割,我們需要做的就是為字符串的前一部分找到最佳的整體最小割。 在動態程序中,每次迭代通常都會存儲總體累積最佳值,這意味着我們不需要回頭看比j-1
更遠,但我們有多個j
可以嘗試。
我們基本上試圖獲得 substring[0 to i] 所需的最小切割,以使分區成為回文。 因此,我們正在檢查子串[j+1, i-1] 是否是回文。 如果那是回文,我們試圖通過考慮 substring [j+1, i-1](j-1 和 j 位置之間的額外切割)+ c[j](這是子串所需的最小切割)來更新它[0, j])。
基本上,O(n^3) 方法和 O(n^2) 方法之間的區別在於我們用於 dp 矩陣的維度。
由於我們已經從一開始就計算了每個 c[i] = substring[0,i] 的最小切割的最小切割值,因此第 j 個循環的(第二個循環)function 將檢查分區的位置。 每次運行第二個循環時,我們只將 substring[0 到 i] 分成兩部分,因為已經計算了前一個字符串所需的最小切割,而后者已經是回文。 我們這樣做直到 i = n-1,因此計算 substring[1 到 n-1] 的最小切割。
我強烈建議您檢查多個案例並遍歷循環。 相信我。 那會更有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.