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