python语法:分割回文串(2)

python语法:分割回文串(2)

题目:

给定一个字符串 s ,将 s 分割成一些子串,使每个子串都是回文串。

返回 s 所有可能的分割方案。

示例:

输入: "aab"
  ["aa","b"],
  ["a","a","b"]
]



解法:

思路如下,题目要求返回所有的可能方案,所以采用回溯算法。

循环查看当前字符串的每一个可切分位置位;判断若在当前位置切分,前半部分是否是回文串。若是,则将前半部分存入当前解,并递归分割后半部分。



例如输入字符串为示例:

|a  |a  |b  |

0 1 2 3

好了用这个例子一步步开始写代码了:

1.检查某段字符串是否为回文串

def check(self,s):
		if len(s) ==0:
			return False
		else:
			start=0
			end = len(s) -1
			while start<=end:
				if s[start] != s[end]:
					return False
				else:
					start+=1
					end -=1
			return True

2.发现前半部分‘a’是回文串,将‘a’存入cur_res,将后半部分‘ab’用作递归。将cur_res加入的result,最终返回result

def partition_helper(self,s,cur_res,result):
		if len(s)==0:
			result.append(cur_res)
		for i in range(1,len(s)+1):
			if self.check(s[:i]):
				self.partition_helper(s[i:],cur_res + [s[:i]],result)


3.当输入字符串为空时,递归结束

	def partition(self,s):
		if len(s)==0:
			return []
		else:
			res=[]
			self.partition_helper(s,[],res)
		return res


总代码如下,测试一下,搞定:



class Solution(object): 
	def check(self,s):
		if len(s) ==0:
			return False
		else:
			start=0
			end = len(s) -1
			while start<=end:
				if s[start] != s[end]:
					return False
				else:
					start+=1
					end -=1
			return True
	def partition_helper(self,s,cur_res,result): 
		if len(s)==0:
			result.append(cur_res)
		for i in range(1,len(s)+1):
			if self.check(s[:i]):
				self.partition_helper(s[i:],cur_res + [s[:i]],result)
	def partition(self,s):
		if len(s)==0:
			return []
		else: