動態(tài)規(guī)劃最長回文子串

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;
    }

   //動態(tài)方程  左下代表子串 子串是回文,當(dāng)前左右相等則為回文

    for r:=1;r<slen;r++{
        for l:= 0;l<r;l++{
          if s[r] != s[l]{
              arr[l][r]=0
          } else {
              //當(dāng)前字符相等 并且長度為3個以內(nèi),必然為回文.解決了對角線下不存在的問題
              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;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容