leetcode132 分割回文串 II golang

132. 分割回文串 II

image.png

解題思路

  1. 首先預(yù)計算 dp[i][j] 用來表示 s[i:j+1]是否為回文字符串
    1. 其中 dp[i][j]= s[i]==s[j] && dp[i+1][j-1]
  2. 然后再設(shè) A[i] 表示為 s[0:i+1] 需要切割的次數(shù)
    1. 則有轉(zhuǎn)移方程 A[i]= A[j]+1, 其中 j<i 并且 s[j+1:i]為回文字符串
    2. 如果s[:i+1]本身為回文字符串,則A[i]=0,不需要再遍歷j

代碼

func minCut(s string) int {
    if len(s)==1{
        return 0
    }
    n := len(s)
    dp := make([][]bool,n)
    for i:=range dp{
        dp[i]=make([]bool,n)
        dp[i][i]=true
        if i>0{
            dp[i][i-1]=true
        }
    }
    for l:=2;l<=n;l++{
        for i:=0;i+l<=n;i++{
            j := i+l-1
            dp[i][j] = s[i]==s[j] && dp[i+1][j-1]
        }
    }

    A := make([]int,n)
    A[0]=0

    for i:=1;i<n;i++{
        if dp[0][i]{
            continue
        }
        A[i]=1e9
        for j:=0;j<i;j++{
            if dp[j+1][i]{
                A[i]=min(A[i],A[j]+1)
            }
        }
    }
    // fmt.Println(A)
    return A[len(A)-1]

}


func min(a,b int)int{
    if a<b{
        return a
    }
    return b
}
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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