leetcode 面試題19 正規表示式

2021-10-05 17:03:07 字數 2171 閱讀 4109

解題思路:採用遞迴的思路,比較複雜的點在於將所有的情況都要考慮到。首先因為p是模式串會出現正規表示式*.,所以所有的情況我們都已模式串p為出發點。具體的情況可以用下面的流程圖表示:

按照流程圖可以寫出下面的**:

class

solution

:def

ismatch

(self, s:

str, p:

str)

->

bool

: lens =

len(s)

lenp =

len(p)

if lenp ==0:

if lens ==0:

return

true

return

false

if lenp ==1:

if lens >

0and

(s[0

]== p[0]

or p[0]

=='.'):

return self.ismatch(s[1:

], p[1:

])return

false

else

:if p[1]

=='*'

:if lens >

0and

(s[0

]== p[0]

or p[0]

=='.'):

return self.ismatch(s, p[2:

])or self.ismatch(s[1:

], p)

return self.ismatch(s, p[2:

])else

:if lens >

0and

(s[0

]== p[0]

or p[0]

=='.'):

return self.ismatch(s[1:

], p[1:

])return

false

思路二:動態規劃,用dp[i][j]表示s[i:]和p[j:]是否匹配,然後可以根據s[i]和p[j]是否匹配以及p[j+1]是否為』*'得到不同的轉態轉移方程,**如下:

class

solution

:def

ismatch

(self, s:

str, p:

str)

->

bool

: lenp =

len(p)

lens =

len(s)

dp =[[

false]*

(lenp +1)

for i in

range

(lens+1)

] dp[-1

][-1

]=true

for i in

range

(lens,-1

,-1)

:for j in

range

(lenp-1,

-1,-

1): first_match = i < lens and

(s[i]

== p[j]

or p[j]

=='.'

)if j +

1< lenp and p[j+1]

=='*'

:if first_match:

dp[i]

[j]= dp[i+1]

[j]or dp[i]

[j+2

]else

: dp[i]

[j]= dp[i]

[j+2

]else

: dp[i]

[j]= first_match and dp[i+1]

[j+1

]return dp[0][0]

面試題1 9月25日面試題

1.簡述http協議 2.請求頭都包含哪些東西?3.常用狀態碼都有哪些?4.django請求生命週期?5.如何自定義中介軟體 6.django怎麼執行原生sql語句 7.什麼是cbv和fbv?8.什麼是mtv框架 mvc框架?9.csrf攻擊原理 10.orm常用方法 11.簡述cookie和ses...

面試題19正規表示式匹配

題目 實現乙個函式用來匹配包含 和 的正規表示式,可以代表任意字母,表示他前面的字元可以出現 0次,includeusing namespace std bool matchcore char str,char pattern if str 0 pattern 0 if str 0 pattern ...

面試題19 正規表示式匹配

請實現乙個函式用來匹配包含 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 含0次 匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但與 aa.a 和 ab a 均不匹配。每次從字串裡拿出乙個字元和模式中的字元去...