wordpress企业网站开发,《基层建设》官方网站,淮南百姓网,学习网站建设的步骤1 问题
给你一个字符串 s#xff0c;找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同#xff0c;则该字符串称为回文字符串。
示例 1#xff1a;
输入#xff1a;s “babad” 输出#xff1a;“bab” 解释#xff1a;“aba” 同样是符合题意的答案。 示…1 问题
给你一个字符串 s找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同则该字符串称为回文字符串。
示例 1
输入s “babad” 输出“bab” 解释“aba” 同样是符合题意的答案。 示例 2
输入s “cbbd” 输出“bb”
2 答案
这题直接不会
2.1 动态规划法
class Solution:def longestPalindrome(self, s: str) - str:n len(s)if n 2: # 如果长度小于2直接返回return smax_len 1begin 0dp [[False] * n for _ in range(n)]for i in range(n):dp[i][i] True # 每个单独的字母都是一个回文子串for L in range(2, n 1):for i in range(n):j L i - 1if j n:breakif s[i] ! s[j]:dp[i][j] False else:if j - i 3: # 如果两个相同是回文子串dp[i][j] Trueelse:dp[i][j] dp[i 1][j - 1] # 为了应对 aaaa 这样的长子串if dp[i][j] and j - i 1 max_len:max_len j - i 1begin ireturn s[begin:begin max_len]这样写应该也是对的
class Solution:def longestPalindrome(self, s: str) - str:n len(s)if n 2:return smax_length 1begin 0dp [[False]*n for _ in range(n)] # 动态规划列表for i in range(n):dp[i][i] Truefor L in range(2, n1):for i in range(n):j L i - 1 # L 子串大小if j n:breakif s[i] ! s[j]:pass # 与原版相比改成了pass因为一般默认为False所以不用重新赋值为Falseelse:if L 3:dp[i][j] Trueelse:dp[i][j] dp[i1][j-1]if dp[i][j] True and max_length L:max_length Lbegin ireturn s[begin: beginmax_length]
3 知识点
在本题中动态规划的状态转移方程为 P ( i , j ) P ( i 1 , j − 1 ) ∧ ( S i S j ) P(i, j)P(i1, j-1) \wedge\left(S_iS_j\right) P(i,j)P(i1,j−1)∧(SiSj)