题目:
给你一个字符串 s,请你将 **s **分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
算法:
func partition(s string) [][]string {
ans := make([][]string, 0)
result := make([]string, 0)
var backtracking func(start int)
backtracking = func(start int) {
if start == len(s) {
ans = append(ans, append([]string{}, result...))
return
}
for i := start; i < len(s); i ++ {
if !isParaladim(s, start, i) {
// 这里不能是break,反例"efe"
continue
}
result = append(result, string(s[start:i + 1]))
backtracking(i + 1)
result = result[:len(result) - 1]
}
}
backtracking(0)
return ans
}
func isParaladim(str string, start, end int) bool {
for start < end {
if str[start] != str[end] {
break
}
start ++
end --
}
return start >= end
}