10. Regular Expression Matching
给定一个输入字符串s
,一个模式p
,实现支持.
和*
的正则匹配:
'.' 匹配单个字符
'*' 匹配零个或者多个元素
- Example 1
输入:s='aa', p='a'
输出:false
- Example 2
输入:s='aa',p='a*'
输出:true
- Example 3
输入:s='ab',p='.*'
输出:true
思路
动态规划思路,首先我们定义P[i][j]为true,如果s[0...i) 和 p[0...j)匹配,否则为false,那么,分三种情况:

class Solution {
public:
bool isMatch(string s, string p) {
int m = s.length(), n = p.length();
vector<vector<bool> > dp(m + 1, vector<bool> (n + 1, false));
dp[0][0] = true;
for (int i = 0; i <= m; i++)
for (int j = 1; j <= n; j++)
if (p[j - 1] == '*')
dp[i][j] = dp[i][j - 2] || (i > 0 && (s[i - 1] == p[j - 2] || p[j - 2] == '.') && dp[i - 1][j]);
else dp[i][j] = i > 0 && dp[i - 1][j - 1] && (s[i - 1] == p[j - 1] || p[j - 1] == '.');
return dp[m][n];
}
};
网友评论