摒弃世俗浮躁
追求技术精湛

【力扣】131. 分割回文串

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

回文串 是正着读和反着读都一样的字符串。

示例 1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

示例 2:

输入:s = "a"
输出:[["a"]]

提示:

  • 1 <= s.length <= 16
  • s 仅由小写英文字母组成

题解:

回溯法:

func partition(s string) [][]string {
	var path []string
	var result [][]string
	var isPalindrome func(s string, startIndex, i int) bool
	// 双指针算法判断字符串是否是回文子串
	// startIndex 和 i 分别代表起始位置和结束位置
	isPalindrome = func(s string, startIndex, i int) bool {
		left := startIndex
		right := i
		for left < right {
			if s[left] != s[right] {
				return false
			}
			left++
			right--
		}
		return true
	}
	var backtracking func(s string, startIndex int)
	backtracking = func(s string, startIndex int) {
		// 终止条件
		if startIndex >= len(s) {
			tmp := make([]string, len(path))
			copy(tmp, path)
			result = append(result, tmp)
			return
		}
		// 单层搜索逻辑
		for i := startIndex; i < len(s); i++ {
			// 这里判断子串如果不是回文串则直接跳过
			if !isPalindrome(s, startIndex, i) {
				continue
			}
			path = append(path, s[startIndex:i+1])
			backtracking(s, i+1)
			// 回溯
			path = path[:len(path)-1]
		}
	}
	backtracking(s, 0)
	return result
}
赞(0) 打赏
未经允许不得转载:时光日记 » 【力扣】131. 分割回文串

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册