0
点赞
收藏
分享

微信扫一扫

LeetCode——10.正则表达式匹配(困难)【DP】


LeetCode——10.正则表达式匹配(困难)【DP】_初值

题解

  • 定义
  • 初值
  • 只需要注意的判断
  • 不匹配的时候,把之前的字符拿掉,看是否匹配
  • 匹配的时候,由于可能匹配很多个,然而我们不需要确定到底匹配了几次,只需要判断
  • ,也就是当前最末尾已经知道能和匹配了,那么删掉
  • 还有,两层循环次序无所谓

AC-Code

class Solution {
public:
bool isMatch(string s, string p) {
int n = s.length();
int m = p.length();
auto matches = [&](int i, int j) {
if(i == 0) return false;
if(p[j - 1] == '.') return true;
return s[i - 1] == p[j - 1];
};
vector<vector<int>> dp(n + 1, vector<int>(m + 1));
dp[0][0] = true;
for(int j = 1; j <= m; ++j) {
for(int i = 0; i <= n; ++i) {
if(p[j - 1] == '*') {
dp[i][j] |= dp[i][j - 2]; // .* 不匹配
if(matches(i, j - 1)) { // 可以匹配(可能多次)
dp[i][j] |= dp[i - 1][j]; // 把当前s[i-1]删掉,看剩下的是否能匹配
}
}
else {
if(matches(i, j)) {
dp[i][j] |= dp[i - 1][j - 1];
}
}
}
}
return dp[n][m];
}
};


举报

相关推荐

0 条评论