正規表示式匹配 動態規劃專題

2021-09-21 13:42:27 字數 2510 閱讀 2775

二、題目解析

3. 遞迴

給定乙個字串 (s) 和乙個字元模式 ( p)。實現支援.*的正規表示式匹配。

匹配應該覆蓋整個字串 (s) ,而不是部分字串。

輸入:

s = "aa"

p = "a"

輸出:false

解釋:"a"無法匹配"aa"整個字串。

輸入:

s = "aa"

p = "a*"

輸出:true

解釋:'*'代表可匹配零個或多個前面的元素, 即可以匹配'a'。因此, 重複'a'一次, 字串可變為"aa"

輸入:

s = "ab"

p = ".*"

輸出:true

解釋:".*"表示可匹配零個或多個('*')任意字元('.')。

輸入:

s = "aab"

p = "c*a*b"

輸出:true

解釋:'c'可以不被重複,'a'可以被重複一次。因此可以匹配字串"aab"

輸入:

s = "mississippi"

p = "mis*is*p*."

輸出:false

來自leetcode第10題----正規表示式匹配

說句實話,剛上來我是沒讀懂這道題的,看了示例才知道,原來是這個樣子的:

既然這是動態規劃專題,我們就先考慮動態規劃求解吧:)

2.1 思路

定義乙個二維的dp陣列,其中dp[i][j]表示s[0,i)p[0,j)是否匹配,然後有下面三種情況:

2.2 狀態轉移方程

d p[

i][j

]=

dp[i - 1][j - 1]\\ dp[i][j - 2]\\ dp[i - 1][j] \&\& (s[i - 1] == p[j - 2]\ ||\ p[j - 2] == '.') \end

dp[i][

j]=⎩

⎪⎨⎪⎧

​dp[

i−1]

[j−1

]dp[

i][j

−2]d

p[i−

1][j

]&&(

s[i−

1]==

p[j−

2]∣∣

p[j−

2]==

′.′)

​ 2.3 複雜度分析

時間複雜度:o(n

2)

o(n^2)

o(n2

)空間複雜度:o(n

2)

o(n^2)

o(n2)

2.4 **實現

class solution 

// i表示s的前i位,j表示p的前j為

for (int i = 1; i < s.length() + 1; i++)

else}}

return dp[s.length()][p.length()];

}};

我們可以考慮最容易想到的遞迴解法的。

3.1 思路

3.2 複雜度分析

時間複雜度:o(n

2)

o(n^2)

o(n2

)空間複雜度:o(1

)o(1)

o(1)

3.3 **實現

class solution 

if (p[1] != '*')

while (!s.empty() && (s[0] == p[0] || p[0] == '.'))

return ismatch(s, p.substr(2));

}};

動態規劃之正規表示式匹配

正規表示式匹配是真真的經典筆試 面試題了,這傢伙的動態規劃狀態轉移的細節得扣的仔仔細細,不然就是漏洞百出,著實細節魔鬼。當然本身的動態思路也是屬於比較困難的。很早之前做過的這題,再次覆盤發現還是會出問題。還是需要整理整理思路。力扣10.正規表示式匹配 關於題幹就不在詳述了,可以直接參考力扣原題。感謝...

LeetCode 正規表示式匹配(動態規劃)

難度 困難 給你乙個字串s和乙個字元規律p,請你來實現乙個支援 和 的正規表示式匹配。所謂匹配,是要涵蓋整個字串s的,而不是部分字串。示例1 輸入 s aa p a 輸出 false 解釋 a 無法匹配 aa 整個字串。示例2 輸入 s aab p c a b 輸出 true 解釋 因為 表示零個或...

正規表示式專題

工作中經常遇到分析log檔案,想從檔案中找到和對應資料的內容,其他的內容不關心.這樣就想用乙個正規表示式匹配指定字串之外的內容,替換成空的,剩下就是我們關心的log內容 正規表示式 需要將rdl報表裡的getcomment parameters f0001.value parameters f000...