leetcode正規表示式匹配

2021-10-04 02:57:14 字數 2355 閱讀 5775

暴力求解:

動態規劃,如果p[j] == s[i], 那麼dp[i][j] = dp[i-1][j-1],意思就是說,如果p的第j個字元和s的第i個字元匹配上了,那麼dp[i][j]是否為true取決於dp[i-1][j-1]

如果p[j] == 『.』,那麼p[j]此時就可以匹配任意字元,情況就和1一樣了,dp[i][j] = dp[i-1][j-1]

如果p[j] == 『*』,那麼此時又要分3中情況:

如果p[j-1] != 『.』 and p[j-1] != s[i],也就說之前的字元不能和當前字元s[i]匹配上,那麼這個時候我們也不直接將dp[i][j]設定為false,而是將此時的 * 看作個數為0,檢視dp[i][j-2]的狀態,即j的前2位的狀況.此時dp[i][j] = dp[i][j-2]

否則話,說明p[j-1]能夠和s[i]匹配上,那麼此時就會有3個狀態,分別當作0個 1個 多個來用,對應的狀態就是

dp[i][j] = dp[i][j-2], *當作0個來用

dp[i][j] = dp[i][j-1], *當作1個來用

dp[i][j] = dp[i-1][j],*當作多個來用

class

solution

:def

ismatch

(self, s:

str, p:

str)

->

bool

:if s ==

none

and p ==

none

:return

true

n =len(s)

m =len(p)

dp =[[

false

for _ in

range

(m+1)]

for _ in

range

(n+1)]

dp[0]

[0]=

true

for j in

range

(m):

if p[j]

=='*'

and dp[0]

[j-1]:

dp[0]

[j+1]=

true

for i in

range(0

, n)

:for j in

range(0

, m)

:if p[j]

=='.'

or p[j]

== s[i]

: dp[i+1]

[j+1

]= dp[i]

[j]elif p[j]

=='*'

:if p[j-1]

!= s[i]

and p[j-1]

!='.'

: dp[i+1]

[j+1

]= dp[i+1]

[j-1

]# 相當於*為0個元素

else

: dp[i+1]

[j+1

]= dp[i+1]

[j-1

]or dp[i+1]

[j]or dp[i]

[j+1

]# *為0個

# *為1個

# *為多個

return dp[n]

[m]

這樣做有些麻煩,我發現乙個非常好的做法:

class

solution

:def

ismatch

(self, s:

str, p:

str)

->

bool:if

not p:

return

not s

first =

bool

(s)and p[0]

in#這裡是用來判斷s是否為空,p[0]是否等於s[0]或者"."

iflen

(p)>=

2and p[1]

=='*'

:return self.ismatch(s, p[2:

])or first and self.ismatch(s[1:

], p)

#判斷p下乙個元素是否與s匹配 並判斷s什麼時候能和p元素匹配

else

:return first and self.ismatch(s[1:

], p[1:

])#判斷下一組

用了遞迴的思想,思路在注釋中。

其實還有其他方法,明天再更。

Leetcode 正規表示式匹配

給你乙個字串 s 和乙個字元規律 p,請你來實現乙個支援 和 的正規表示式匹配。匹配任意單個字元 匹配零個或多個前面的那乙個元素 所謂匹配,是要涵蓋 整個 字串 s的,而不是部分字串。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例...

Leetcode 正規表示式匹配問題

給定乙個字串 s 和乙個字元模式 p 實現支援 和 的正規表示式匹配。匹配任意單個字元。匹配零個或多個前面的元素。匹配應該覆蓋整個字串 s 而不是部分字串。說明 示例 1 輸入 s aa p a 輸出 false解釋 a 無法匹配 aa 整個字串。示例 2 輸入 s aa p a 輸出 true解釋...

正規表示式 匹配

字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...