描述
给定一个字符串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"))