請實現乙個函式用來匹配包括'.'和'*'的正規表示式。模式中的字元'.'表示任意乙個字元,而'*'表示它前面的字元可以出現任意次(包含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 betrue
ifs[0..i)
matchesp[0..j)
andfalse
otherwise. 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 均不匹配 思路 當模式中的第二...