LeetCode005最長回文子串之動態(tài)規(guī)劃

題目描述:

給你一個字符串?s,找到?s?中最長的回文子串。


解法:動態(tài)規(guī)劃

維基百科:動態(tài)規(guī)劃(英語:Dynamic programming,簡稱 DP),是一種在數(shù)學(xué)、管理科學(xué)、計算機科學(xué)、經(jīng)濟學(xué)和生物信息學(xué)中使用的,通過把原問題分解為相對簡單的子問題的方式求解復(fù)雜問題的方法。動態(tài)規(guī)劃常常適用于有重疊子問題和最優(yōu)子結(jié)構(gòu)性質(zhì)的問題。

以該題為例:首先,從示例中可看出該題可能是不唯一解,我們需要從所給的字符串s中,找到滿足符合條件的子字符串。簡單的說,我們需要遍歷字符串s的任意長度的子字符串,再通過條件判斷,返回最長的子字符串。

判斷過程:


我們通過字符串s對長度建立一個正二維表,使用兩個指針,一個指針i從索引1的位置開始鎖定,另一個指針j從索引0的位置到一直遍歷到第一個指針的位置。令 dp[i][j]?表示 S[i]?至 S[j]?所表示的子串是否是回文子串,是則為 True,不是則為False。這樣根據(jù) S[i]?是否等于 S[j] ,可以把轉(zhuǎn)移情況分為兩類:

?1.若 S[i] == S[j],那么只要 S[i+1]?至 S[j-1]?是回文子串,S[i]?至 S[j]?就是回文子串;如果S[i+1]?至 S[j-1]?不是回文子串,則 S[i]?至 S[j]?也不是回文子串。

?2.若 S[i] != S[j],那么 S[i]?至 S[j]?一定不是回文子串。

依次進(jìn)行對比:


源代碼:


去試試吧!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容