LeetCode短視頻 | 最長迴文子串,使用動態規劃的通俗分析
- 2019 年 12 月 23 日
- 筆記
前面一章中,介紹了什麼是動態規劃,傳送地址:這裡。

為確保理解什麼是迴文。
迴文是一個正讀和反讀都相同的字符串,例如,「aba」 是迴文,而「abc」 不是。
當子串只包含1個字符,它一定是迴文子串;
當子串包含2個以上字符的時候:如果s[l, r]是一個迴文串,s[l + 1, r – 1] 也一定是迴文串。
例如 「abccba」,那麼這個迴文串兩邊各往裏面收縮一個字符(如果可以的話)的子串s[l + 1, r – 1]也一定是迴文串,即:如果dp[l][r] == true成立,一定有dp[l + 1][r – 1] = true成立。
使用動態規劃解決此問題的步驟:
1. 定義一個二維數組bool dp[len-1][len-1]來記錄遍歷字符串所得的狀態,dp[l][r]為true表示從l到r的子串為迴文串,false表示不是迴文串
2. 初始化二維數組,單個字符為迴文串,所以定義dp[i][i] = true
3. 找到狀態轉移方程,dp[l][r] = (s[r]==s[l] &&(r-l==1 || dp[l+1][r-1])) ? true : false
話不多說,直接上短視頻吧:
貼代碼:

——END——