动态规划最长回文子串

func longestPalindrome(s string) string {
    if s == ""{
        return ""
    }
    slen := len(s)
    //初始化对角线
    var arr =  make([][]int,slen)
    for i:=0;i<slen;i++{
        arr[i]=make([]int,slen)
        arr[i][i] = 1;
    }

   //动态方程  左下代表子串 子串是回文,当前左右相等则为回文

    for r:=1;r<slen;r++{
        for l:= 0;l<r;l++{
          if s[r] != s[l]{
              arr[l][r]=0
          } else {
              //当前字符相等 并且长度为3个以内,必然为回文.解决了对角线下不存在的问题
              if r-l<3{
                  arr[l][r]=1
              }else{
                arr[l][r]= arr[l+1][r-1]
              }
          }
        }
    }

    maxstr := ""
    maxlen := 0
    for j:=0;j<slen;j++{
       for i:= 0;i<=j;i++{
           if arr[i][j]==1 && j-i+1>maxlen {
               maxlen = j-i+1
               maxstr = s[i:j+1]
           }
       }
    }
    return maxstr;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。