Definir um bidimensional matriz dp, dp [i] [j ] indica os primeiros caracteres j antes i-ésimo carácter do s e p são combinados
DP [i] [j] é calculado como o
dp primeiro conjunto [0] [0 ] é verdade, porque os dois caracteres nulos é correspondido
se i = 0, então representado por uma string vazia para coincidir com o primeiro j caracteres p, esperamos p [j] ==, antes de tais personagens não aparecem, dp [ i] [j] = P [ j] == * e dp [i] [j-2]
, se s [i] == P [j ] , em seguida, um olhar directo i-1, j-1, e não é combinado , dp [i] [j] = dp [i-1] [j-1]
a última é a situação a ser tratada, há duas opções, repita o caractere anterior de cada vez, ou não esse personagem, enquanto um pode igualar na linha
não antes uma personagem, dp [i] [J- 2]
repetição, é necessária para satisfazer a condição P [j-1] == s [i] ou P [j-1] == '', dp [I-1] [ j]
e finalmente retorna dp [m] [n], que pode corresponder resultado
classe Solução:
DEF IsMatch (Ser, S: STR, P: STR) -> BOOL:
S, P = '#' + S: '#' P +
m, n- = len (S), len (P)
de DP = [[Falso] * para _ em n-Escala (m)]
DP [0] [0] = verdadeira
para I em Gama (m):
em J Faixa para (1, n.):
IF I == 0:
DP [I] [J] = J> 1 e P [j] == '*' e DP [I] [J-2].
elif P [ J] em [S [I],] '':
DP [I] [J] DP = [1-i] [J- 1]..
elif P [J] == '*':
DP [I] [J ] = J> 1 e DP [I] [J-2] ou P [J- 1] em [S [I].,] e DP [I-1] [J].. ''
a outra:
DP [I] [ J] = false
retorno dp [-1] [- 1]
autor: Loick
link: https: //leetcode-cn.com/problems/zheng-ze-biao-da-shi-pi-pei-lcof/solution/dong -tai-gui-hua-er / wei-shu-zu-by-Loick
fonte: botão estadia (LeetCode)
copyright reservados pelos autores. reimpressão comercial entre em contato com o autor autorizado, reimpressão não comercial por favor, indicar a fonte.