描述
给定字符串 s
, 需要将它分割成一些子串, 使得每个子串都是回文串.
返回所有可能的分割方案.
- 不同的方案之间的顺序可以是任意的.
- 每种分割方案中的每个子串都必须是
s
中连续的一段.
样例
样例 1:
输入: "a"
输出: [["a"]]
解释: 字符串里只有一个字符, 也就只有一种分割方式 (就是它本身)
样例 2:
输入: "aab"
输出: [["aa", "b"], ["a", "a", "b"]]
解释: 有两种分割的方式.
1. 将 "aab" 分割成 "aa" 和 "b", 它们都是回文的.
2. 将 "aab" 分割成 "a", "a" 和 "b", 它们全都是回文的.
这一题说白了,也是排列组合问题,排列组合问题全部用dfs来做。这为什么是一个排列组合问题呢,因为分割字符串本质上是在不同的间隙切一刀,可以理解为找不同间隙的排列组合。
对这一题而言,是有一些字符串上的操作的,需要同学们比较熟悉编程语言对于字符串下标的处理。同时,判断是否是回文串最好单独使用一个函数,在工程上看起来美观。
代码如下:
class Solution:
"""
@param: s: A string
@return: A list of lists of string
"""
def partition(self, s):
# write your code here
if len(s)==0:
return []
self.result=[]
index=0
self.search(s,index,[])
return self.result
# 判断是否回文串
def ishuiwen(self,s):
start,end=0,len(s)-1
while end>start:
if s[start]!=s[end]:
return False
start+=1
end-=1
return True
def search(self,s,index,list):
# 越界
if index==len(s)+1:
return
# 判断是否是回文
if len(list)!=0 :
if not self.ishuiwen(list[-1]):
return
length=0
for subs in list:
length+=len(subs)
# 是符合条件的结果
if length==len(s):
self.result.append(list)
for i in range(index+1,len(s)+1):
self.search(s,i,list+[s[index:i]])
ss='aab'
s = Solution()
print(s.partition(ss))