公司做网站需要什么内容,网页设计图纸,wordpress开发教程 pdf,网站设计与开发专业一道题能否使用动态规划就在于判断最优结构是否是通过最优子结构推导得到#xff1f;如果显然具备这个特性#xff0c;那么就应该朝动态规划思考。如果令dp[i][j]表示串s[i:j1]是否是回文子串#xff0c;那么判断dp[i][j] 是否是回文子串#xff0c;相当于判断s[i] 与 s[j]… 一道题能否使用动态规划就在于判断最优结构是否是通过最优子结构推导得到如果显然具备这个特性那么就应该朝动态规划思考。如果令dp[i][j]表示串s[i:j1]是否是回文子串那么判断dp[i][j] 是否是回文子串相当于判断s[i] 与 s[j] 是否相等 dp[i1][j-1] 是否是回文串。 1. 题目
2. 分析
这道题我写了一个小时才写出来相比之前看答案写题是有进步的。估计这道题我这半个月都不会忘记了。一道题能否使用动态规划就在于判断最优结构是否是通过最优子结构推导得到如果显然具备这个特性那么就应该朝动态规划思考。
具体看一个样例sbabad判断这个字符串是否是最长回文子串相当于判断aba是否是回文子串和b与d是否相等。
01234babad
相当于判断最后一个字符和要判断子串的第一个字符是否相等外加判断内部子串是否是回文子串。
123aba
那么抽象一下就可以得出判断dp[i][j] 是否是回文子串相当于判断s[i] 与 s[j] 是否相等 dp[i1][j-1] 是否为1。
3. 代码
class Solution:def longestPalindrome(self, s: str) - str:dp [[0] * len(s) for i in range(len(s))]for cur_length in range(1, len(s)1):for i in range(0, len(s)):j i cur_length - 1 # 终点下标if j len(s): # 越界处理continueif j i:dp[i][j] 1continueif cur_length 2: # 长度为2的区间if s[j] s[i]:dp[i][j] 1continueif s[j] s[i] and dp[i1][j-1]: # 如果起点和终点相同dp[i][j] 1# print(dp)max_len 0res for i in range(len(s)):for j in range(len(s)):if dp[i][j] 1:if j-i1 max_len:max_len max(max_len, j-i1)res s[i:j1]return res