分割回文串

pardon110發表於2020-11-11

題面

給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。返回 s 所有可能的分割方案。

示例:
輸入: “aab”
輸出:

[
  ["aa","b"],
  ["a","a","b"]
]

連結:leetcode-cn.com/problems/palindrom...

分析

  • 迴文串判定
  • start切入起點,end 橫向遍歷餘下可能迴文終點
  • 條件退出
  • 先排除不可用,回溯遞迴能進則進
  • 遞迴引數path 記錄外層可用迴文子串,start 記入內層起始點

上碼

func partition(s string) [][]string {
    rs := [][]string{}
    var backtrace func(int, []string)
    backtrace = func(start int, path []string){
        if start == len(s) {
            cp := make([]string, len(path))
            copy(cp, path)
            rs = append(rs, cp)
            return 
        }
        for end := start+1;end <= len(s);end++ {
            if !isPalindrome(s[start:end]){
                continue
            }
            backtrace(end, append(path, s[start:end]))
        }
    }
    backtrace(0,[]string{})
    return rs
}
func isPalindrome(b string) bool {
    for i:=0;i< len(b)-1-i;i++ {
        if b[i] != b[len(b)-1-i] {
            return false
        }
    }
    return true
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章