( )52 正規表示式匹配

2021-09-24 18:30:16 字數 1474 閱讀 7428

請實現乙個函式用來匹配包括'.'和'*'的正規表示式。模式中的字元'.'表示任意乙個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配

leetcode對應題目:10. 正規表示式匹配

題目解答

總結:題目的意思是完全匹配所有字元,而不是匹配子串,要分清和kmp的區別。所有在判斷的時候一旦發現前面的匹配了,字串str和pattern都可以向後移動了,而不用向前尋找,再重新匹配。題目中有兩個字元'.'和'*'是特殊的,

class solution   

else}};

char*避免string的多次拷貝:

class solution 

else}};

dp的解法:(轉)

we definedp[i][j]to betrueifs[0..i)matchesp[0..j)andfalseotherwise. the state equations will be:

dp[i][j] = dp[i - 1][j - 1], ifp[j - 1] != '*' && (s[i - 1] == p[j - 1] || p[j - 1] == '.');

dp[i][j] = dp[i][j - 2], ifp[j - 1] == '*'and the pattern repeats for 0 time;

dp[i][j] = dp[i - 1][j] && (s[i - 1] == p[j - 2] || p[j - 2] == '.'), ifp[j - 1] == '*'and the pattern repeats for at least 1 time.

i think this sentence:"p[i][j] to be true if s[0..i) matches p[0..j) and false otherwise"should change to the"p[i][j] will be true if the s[0...i-1]==p[0....j-1]"

class solution } }

return dp[m][n];}};

52 正規表示式匹配

題目 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 思路 當模式中的第二...

52 正規表示式匹配

題目描述 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 分析 現在只考慮...

52 正規表示式匹配

題目描述 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 abaca 匹配,但是與 aa.a 和 ab a 均不匹配 思路 當模式中的第二...