描述
给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。
返回s所有可能的回文串分割方案。
您在真实的面试中是否遇到过这个题?
样例
给出 s = "aab"
,返回
[
["aa", "b"],
["a", "a", "b"]
]
这一题我本来的思路是,首先得到所有的排列,即在哪个位置可以分割,然后再分割字符串,再将分割得到的每一个子字符串进行判断是否是回文。思路是挺清晰的,但是结果竟然超时了:
class Solution:
"""
@param: s: A string
@return: A list of lists of string
"""
def partition(self, s):
# write your code here
def search(totalyString,subString,index): #得到所有排列组合
if(index==len(totalyString)-1):
self.result.append(subString)
return
search(totalyString,subString+[index],index+1)
search(totalyString,subString,index+1)
return
def ishuiwen(substring): #判断是否是回文字符串
begin,end=0,len(substring)-1
while begin<end:
if(substring[begin]!=substring[end]):
return False
begin+=1
end-=1
return True
def divide(totalyString,list): #根据排列组合得到所有子字符串
subsets=[]
start=0
for i in range(len(list)):
subsets.append(totalyString[start:list[i]+1])
start=list[i]+1
subsets.append(totalyString[start:])
flag=0
for substring in subsets: #判断此子字符串是否是回文
if(not ishuiwen(substring)):
flag=1
if(flag==0):self.StringResult.append(subsets)
return
self.result=[]
search(s,[],0)
self.StringResult = []
for i in self.result:
divide(s,i)
return self.StringResult
s = Solution()
print(s.partition("amanaplanacanalpanama"))
这让我非常忧伤,不得不想别的办法:class Solution:
"""
@param: s: A string
@return: A list of lists of string
"""
def partition(self, s):
# write your code here
def ishuiwen(substring): #判断是否是回文字符串
begin,end=0,len(substring)-1
while begin<end:
if(substring[begin]!=substring[end]):
return False
begin+=1
end-=1
return True
def search(totalyString,list,index):
if(index==len(totalyString)):
self.result.append(list)
for i in range(index,len(totalyString)):
substring=totalyString[index:i+1]
if(not ishuiwen(substring)):
continue
search(totalyString,list+[substring],i+1)
self.result=[]
search(s,[],0)
return self.result
s = Solution()
print(s.partition("amanaplanacanalpanama"))