两种解法,发现用了回溯后跑分居然下降了。可能重复修改一条长list的代价要比重复构建list要大;也许python每次free了每层递归的local variable的内存。

解法1

class Solution:
    def partition(self, s: str) -> List[List[str]]:
        results = []
        dfs(results, [], s, 0)
        return results

def dfs(results, path, s, index):
    if index == len(s):
        results.append(path)
        return
    for j in range(index+1, len(s)+1):
        sub = s[index:j]
        if is_palindrome(sub):
            dfs(results, path + [sub], s, j)

def is_palindrome(sub):
    return sub[::-1] == sub

解法二

class Solution:
    def partition(self, s: str) -> List[List[str]]:
        results = []
        dfs(results, [], s, 0)
        return results

def dfs(results, path, s, index):
    if index == len(s):
        results.append([i for i in path])
        return
    for j in range(index+1, len(s)+1):
        sub = s[index:j]
        if is_palindrome(sub):
            path.append(sub)
            dfs(results, path, s, j)
            path.pop()

def is_palindrome(sub):
    return sub[::-1] == sub
最后修改日期: 2022年9月4日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。