179 - 131 分割回文串
题目
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]
解答
感觉可以回溯。算出结果,然后验证下是不是回文
https://leetcode-cn.com/problems/palindrome-partitioning/solution/dong-tai-gui-hua-dfs-by-powcai/
方法还是需要两个变量:剩余选择+已走路径

class Solution:
def partition(self, s: str) -> List[List[str]]:
res = []
def backtrack(s, tmp): # s是剩余选择,tmp是已走路径
if not s: # 没有选择了,就推进结果里面
res.append(tmp)
return
for i in range(1, len(s)+1):
if s[:i] == s[:i][::-1]: # 就是判断s[:i]是不是回文,[::-1]查了才知道还能这么玩,这下都不用回滚选择了。。
backtrack(s[i:], tmp+[s[:i]])
backtrack(s, []) # 两个变量都是通过参数传递,就不用新建
return res
Runtime: 80 ms, faster than 79.14% of Python3 online submissions for Palindrome Partitioning.
Memory Usage: 13 MB, less than 100.00% of Python3 online submissions for Palindrome Partitioning.
Last updated
Was this helpful?