10 正規表示式匹配

2021-08-02 21:32:23 字數 2009 閱讀 9801

implement regular expression matching with support for 『.』 and 『*』.

『.』 matches any single character.

『*』 matches zero or more of the preceding element.

the matching should cover the entire input string (not partial).

the function prototype should be:

bool ismatch(const char *s, const char *p)

some examples:

ismatch(「aa」,」a」) → false

ismatch(「aa」,」aa」) → true

ismatch(「aaa」,」aa」) → false

ismatch(「aa」, 「a*」) → true

ismatch(「aa」, 「.*」) → true

ismatch(「ab」, 「.*」) → true

ismatch(「aab」, 「c*a*b」) → true

字串操作:

s.substr(pos,len);//擷取字串,從下標為pos的位置擷取(包括此位置)長度為len字串

s.substr(pos);//從pos位置擷取到最後

s1.equals(s2);//比較字串 函式在》時返回1,《時返回-1,==時返回0

s1==s2;//比較字串

邏輯符號運算順序:

!>&&>||;//
本題適合使用動態規劃辦法求解,通過將問題劃分為最優子結構,最終求得最優解。

分為如下三種情況,f[i][j]表示字串s與p的匹配情況i,j分別為其字串長度:

1 ) p[j-1]!=』*』:

f[i][j]=f[i-1][j-1]&&(s[i-1]==p[j-1]||p[j-1]==』.』)

2 ) p[j-1]==』*』:

a:*相當於匹配0次:

f[i][j]=f[i][j - 2]

b:*相當於重複匹配多次:

10 正規表示式匹配

思路類似最長公共子串行,dp i j dp i 1 j 1 如果s i p j p j dp i j 2 如果p j s i p j 1 dp i 1 j dp i j 1 dp i 1 j 1 dp i 1 j 2 dp i j 2 如果p j s i p j 1 稍稍解釋下 對於s和p,設各個最...

10 正規表示式匹配

剛開始很奇怪為什麼這個題的標籤是困難,然後寫了出來發現我寫出來的只針對從頭到尾都一樣,而不是如示例4,可以匹配一部分。示例 4 輸入 s aab p c a b 輸出 true 解釋 因為 表示零個或多個,這裡 c 為 0 個,a 被重複一次。因此可以匹配字串 aab 只針對從頭到尾相同的字串的程式...

10 正規表示式匹配

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