給定乙個字串s,找到其中最長的回文子串行。可以假設s的最大長度為1000。f[i][j] 表示 s 的第 i 個字元到第 j 個字元組成的子串中,最長的回文序列長度是多少。示例 1:
輸入:"bbbab"
輸出:4
乙個可能的最長回文子串行為 "bbbb"。
示例 2:
輸入:"cbbd"
輸出:2
乙個可能的最長回文子串行為 "bb"。
如果 s 的第 i 個字元和第 j 個字元相同的話:f[i][j] = f[i + 1][j - 1] + 2
如果 s 的第 i 個字元和第 j 個字元不同的話:f[i][j] = max(f[i + 1][j], f[i][j - 1]),當s[i]!=s[j] 取s[i+1..j] 和s[i..j-1]中最長的
根據dp方程,注意i,j遍歷順序,j從0開始從前往後遍歷,i從j開始從後向前遍歷
f[j][j] = 1 單個字元的最長回文序列是 1
f[0][n - 1]
class solution(object):
def longestpalindromesubseq(self, s):
""":type s: str
:rtype: int
"""n=len(s)
dp=[[ 0 for _ in range(n)] for _ in range(n)]
for j in range(n):
dp[j][j]=1
for i in range(j-1,-1,-1):
if s[i]==s[j]:
dp[i][j]=dp[i+1][j-1]+2
else:
dp[i][j]=max(dp[i+1][j],dp[i][j-1])
return dp[0][n-1]
LeetCode 516 最長回文子串行
這題看了好久 本來以為和最長字串差不多用動態規劃設兩個列表來算但是沒什麼頭緒 後來去看了別人的解法 看了十幾分鐘才看懂 下面這種解法 1單位要單獨拿出來算 從2開始因為互文的子串行兩頭肯定是一樣的 如 aba acbca 假如能使 martix i j 等於從 s i 到 s j 所包含的最大子串行...
leetcode 516 最長回文子串行
給定乙個字串s,找到其中最長的回文子串行。可以假設s的最大長度為1000。示例 1 輸入 bbbab 輸出 4 乙個可能的最長回文子串行為 bbbb 示例 2 輸入 cbbd 輸出 2 乙個可能的最長回文子串行為 bb 解題思路 狀態 f i j 表示 s 的第 i 個字元到第 j 個字元組成的子串...
Leetcode 516 最長回文子串行
描述 給定乙個字串s,找到其中最長的回文子串行。可以假設s的最大長度為1000。示例 1 輸入 bbbab 輸出 4 乙個可能的最長回文子串行為 bbbb 示例 2 輸入 cbbd 輸出 2 乙個可能的最長回文子串行為 bb 思路 遍歷每個子串,從下到上構造dp陣列,dp i j 表示從i到j的最長...