131.分割回文串

58 阅读1分钟

题目:
给你一个字符串 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
}