題面
給定一個字串 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 協議》,轉載必須註明作者和本文連結