簡體   English   中英

O(N^2) 時間內的回文分區問題

[英]Palindrome Partitioning problem in O(N^2) time

問題描述:

給定一個字符串 s,分區 s 使得該分區的每個 substring 都是一個回文。 返回 s 的回文分區所需的最小割。

問題鏈接

雖然我能夠編寫 O(N^3)解決方案,但在 O(N^2) 優化中遇到問題

這是優化的解決方案說明

在第一行“cut[i] 是 cut[j - 1] + 1 (j <= i) 的最小值,如果 [j, i] 是回文”

為什么會這樣? 形式證明不是必需的,直覺也可以。

如果S[j..i]是回文,則該部分(從ji )說明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.

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