【LeetCode笔记】5.最长回文子串(Java、动态规划、字符串)
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode笔记】5.最长回文子串(Java、动态规划、字符串)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目描述
- 解法 & 代碼:
- 思路
題目描述
- 回文:正著念和倒著念一樣。
解法 & 代碼:
- 一開始看到子串,想著可能no.3最長重復子串一樣用滑動窗口。不過回文串的判斷會很麻煩,于是舍棄。
- 之后看題解,用的是動態規劃。
思路
- 從短串,到長串循環,最終得到一個dp[][]二維矩陣,dp[i][j]代表S(i,j)是否是回文串。
- 單個元素的情況,必然是回文串。dp[i][i]。
- 兩個元素的情況,根據S[i] == S[i+1]即可判斷。
- 多個元素的情況,根據dp[i+1][j-1]以及S[i] == S[j]即可判斷。
- 有了這三種情況,我們就有了狀態轉移方程。
- 對于循環,可以看成是對于每一個子串長度,都從每一個左邊界 i開始構成串:因此j > i的情況全算是false。
- 時間復雜度:O(n2n^2n2):因為動態規劃的狀態總數為n2n^2n2,對于每一個狀態進行轉移的時間為O(1)
- 空間復雜度:O(n2n^2n2):也就是dp[n][n],存儲動態規劃狀態需要的空間。
總結
以上是生活随笔為你收集整理的【LeetCode笔记】5.最长回文子串(Java、动态规划、字符串)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干货 | 大牛谈嵌入式C语言的高级用法
- 下一篇: python训练手势分类器_python