Notas de cepillado de Likou: 131. Palíndromo dividido (retrospectiva de preguntas clásicas, establecer directamente la plantilla)

tema:

131, cuerda palíndromo dividida

Dada una cadena s, divida s en algunas subcadenas para que cada subcadena sea un palíndromo.

Devuelve todos los esquemas de división posibles para s.

Ejemplo:

Entrada: "aab"
Salida:
[
["aa", "b"],
["a", "a", "b"]
]

Ideas de solución de problemas:

Al ver que el título requiere "todos los resultados posibles" en lugar de "el número de resultados", en circunstancias normales, sabemos que necesitamos la fuerza bruta para buscar todas las soluciones factibles, y podemos utilizar el "método de retroceso". Establezca directamente el código de plantilla de Python del método de retroceso.

Rutina de plantilla de Python del método de retroceso: https://blog.csdn.net/weixin_44414948/article/details/114489545

Complejidad temporal: O (N * 2 ^ N), porque hay un total de O (2 ^ N) métodos de segmentación y cada segmentación debe determinar si el palíndromo requiere O (N) complejidad temporal.
Complejidad del espacio: O (2 ^ N), el resultado devuelto se puede dividir en métodos O (2 ^ N) como máximo.

Código Python de la solución del problema:

La solución Python usa una nueva ruta de matriz + [s [: i]] cada vez que busca el área de ubicación. Esto tiene la ventaja de la conveniencia: diferentes rutas usan diferentes rutas, por lo que path.pop () Operation; y no hay Necesito copiar la ruta profundamente cuando res.append (ruta).

class Solution(object):
    def partition(self, s):
        self.isPalindrome = lambda s : s == s[::-1]
        res = []
        self.backtrack(s, res, [])
        return res
        
    def backtrack(self, s, res, path):
        if not s:
            res.append(path)
            return
        for i in range(1, len(s) + 1): #注意起始和结束位置
            if self.isPalindrome(s[:i]):
                self.backtrack(s[i:], res, path + [s[:i]])

Autor: fuxuemingzhu
enlace: https://leetcode-cn.com/problems/palindrome-partitioning/solution/hui-su-fa-si-lu-yu-mo-ban-by-fuxuemingzh-azhz/
Fuente: botón de permanecer ( LeetCode) https://leetcode-cn.com/problems/palindrome-partitioning/

Supongo que te gusta

Origin blog.csdn.net/weixin_44414948/article/details/114490837
Recomendado
Clasificación