131. Palindrome Partitioning

題目

給定一個字符串 s, 將s分解為每個字串都是回文字串。返回所有可能的回文字串。

解析

可以遞歸的解決這個問題,假設字符串 s 長度為 n,求字符串 s 的所有可能回文分解方法 f(0,n) 即使求 s(0,0)f(1,n) + s(0,1)f(2,n) + ...+ s(0,k)f(k+1,n) + ... + s(0,n)f(n,n)

偽代碼

f(s string) [][]string

for i<len
  if isPalindrome(s[0,i])
    rst += s[0,i].append(f(i,n))

代碼

func partition(s string) [][]string {
    return f([]byte(s))
}

func f(s []byte) [][]string {
    if len(s) == 0 {
        return [][]string{{}}
    }
    var rst [][]string
    for k:=1; k<=len(s); k++ {
        if isPalindrome(s[:k]) {
            tmp := f(s[k:])
            for i := range tmp {
                tmp[i] = append([]string{string(s[:k])}, tmp[i]...)
                rst=append(rst, tmp[i])
            }
        }
    }
    return rst
}
                        
func isPalindrome(s []byte) bool {
    for i:=0;i<len(s) / 2;i++ {
        if s[i] != s[len(s)-i-1] {
            return false
        }
    }
    return true
}
image.png

優(yōu)化

每次都要重復判斷一個字符串是否是回文字串,顯得很浪費,基于此,我們先求出這個字符串中的所有回文串,就不再需要額外的重復時間計算了。
構建一個回文矩陣dp,dp[i][j] == true 表示

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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