Exercer um tópico botão de energia

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]

Acho que você gosta

Origin www.cnblogs.com/zhaop8078/p/12500264.html
Recomendado
Clasificación