LeetCode - 5. Longest Palindromic Substring
Medium
題目
Given a string s, return the longest palindromic substring in s.
Example 1
Input: s = "babad"
Output: "bab"
Explanation: "aba" is also a valid answer.
Example 2
Input: s = "cbbd"
Output: "bb"
Constraints
1 <= s.length <= 1000sconsist of only digits and English letters.
解題思路
經典區間 DP 題
核心在於判斷一段字串 i ~ j 是否為回文
DP 定義:
dp[i][j]:代表s[i...j]是否為回文
枚舉方式:
- 先枚舉長度
len - 再枚舉起點
i - 終點
j = i + len - 1
- 先枚舉長度
判斷條件:
- 當
s[i] == s[j]時,才有可能是回文 - 接著檢查中間區間:
- 若
len <= 2- 長度為 1 或 2,只要頭尾相同就是回文
- 或是
dp[i+1][j-1] == true- 中間本身已經是回文
- 若
- 當
轉移:
dp[i][j] = true若符合上述條件
同時維護最長回文:
- 若目前長度
len比maxLen大- 更新
maxLen - 記錄起點
maxStart
- 更新
- 若目前長度
最後回傳:
s.substr(maxStart, maxLen)
Solution Code
Time Complexity
O(n^2)
Space Complexity
O(n^2)
1 | |