10. A correspondência de expressão regular
Dar-lhe uma cadeia de caracteres s e uma lei p, convidamos você a implementar um suporte '' e '*' na correspondência de expressão regular.
'' Corresponde a qualquer caractere
'*' corresponde a zero ou mais do elemento anterior que uma
chamada de correspondência, para cobrir toda cadeia s, e não a parte da string.
Descrição:
s pode estar vazio, e apenas as letras minúsculas do az.
p pode estar vazio e conter apenas letras minúsculas de az, e caracteres. e *.
Exemplo 1:
Entrada:
S = "AA"
P = "A"
saída: false
interpretação: "a" não pode corresponder a toda a cadeia "aa".
Exemplo 2:
Entrada:
S = "AA"
P = "A *"
Saída: verdadeira
explicação: porque os '*' corresponde a zero ou representantes do exposto que uma pluralidade de elementos, isto é, em frente do elemento de 'a'. Assim, a string "aa" pode ser considerado como 'a' é repetida uma vez.
Exemplo 3:
Entrada:
S = "ab &"
P = "*."
Output: true
explicou: "*" denota zero ou mais partidas ( '*') de qualquer caractere ( '').
Exemplo 4:
Entrada:
S = "AAB"
P = "C * A * B"
Saída: verdadeira
explicação: porque os '*' significa zero ou mais, em que 'C' é 0, 'a' é repetida uma vez. Por isso, pode coincidir com a string "AAB".
Exemplo 5:
Entrada:
S = "Mississippi"
P = "MIS * É * P *."
Saída: false
classe Solução:
def IsMatch (self, é: str, p: str) -> bool:
dp = [[falso] * (len (p) + 1) para _ na faixa (len (s) + 1)]
dp [-1] [- 1] = verdadeira
para i na gama (len (s), -1, -1):
para j na gama (len (p) - 1, -1, -1):
first_match = i <len (s) e P [j] {s em [i], ''}
se j + 1 <len (P) e P [j + 1] == '*':
dp [i] [j] = dp [i] [j + 2] ou first_match e dp [I + 1] [j]
else:
dp [i] [j] = first_match e dp [I + 1] [j + 1]
retorno dp [0] [0]