ToB企服应用市场:ToB评测及商务社交产业平台

标题: [动态规划]最长回文子串-对于动态转移循环顺序的思考 [打印本页]

作者: 小小小幸运    时间: 2022-8-12 11:09
标题: [动态规划]最长回文子串-对于动态转移循环顺序的思考
最长回文子串
标题

给你一个字符串 s,找到 s 中最长的回文子串。
样例

示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答思路

本题使用dp的思想
易错点

平常的动态规划都是对dp数组直接按行循环,但是这道题不行,因为我们发现dp[j] = dp[i + 1][j - 1]这个状态意味着每个位置都由他的左下角决定,如果按行来,那么左下角还没有状态导致错误
所以我们要按行来进行状态转移
代码
  1. func longestPalindrome(s string) string {
  2.   dp := make([][]bool,len(s))
  3.   for i := range dp {
  4.       dp[i] = make([]bool,len(s))
  5.       dp[i][i] = true
  6.   }
  7.   be,end := 0,0
  8.   maxlen := -1
  9.   for j := 0;j < len(s);j++ {
  10.       for i := 0; i < j;i++ {
  11.           if s[i] != s[j] {
  12.               dp[i][j] = false
  13.           }else {
  14.               if j - i >= 3 {
  15.                   dp[i][j] = dp[i + 1][j - 1]
  16.               }else{
  17.                   dp[i][j] = true
  18.               }
  19.           }
  20.           if dp[i][j] == true && j - i > maxlen {
  21.               maxlen = j - i
  22.               be,end = i,j
  23.           }
  24.       }
  25.   }
  26.   return string(s[be:end + 1])
  27. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4