leetcode 10. 正则表达式匹配
题目:leetcode 10. 正则表达式匹配
https://leetcode.cn/problems/regular-expression-matching/submissions/
视频讲解:
https://www.bilibili.com/video/BV1jd4y1U7kE?spm_id_from=333.788.videopod.sections&vd_source=136c403361d2786d99be256b33ac445a
#include <vector>
#include <string>
using namespace std;class Solution {
public:bool isMatch(string s, string p) {int m = s.size(), n = p.size();vector<vector<bool>> f(m + 1, vector<bool>(n + 1, false));f[0][0] = true; // 两个空字符串可以匹配// 初始化第一行,处理s为空字符串,p为a*b*c*等情况for (int j = 1; j <= n; j++) {if (p[j-1] == '*') {f[0][j] = f[0][j-2];}}// 填充动态规划表for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (p[j-1] != '*') {// 当前字符匹配或为'.'f[i][j] = (s[i-1] == p[j-1] || p[j-1] == '.') && f[i-1][j-1];} else {// 当前字符为'*',处理两种情况if (s[i-1] == p[j-2] || p[j-2] == '.') {// 情况1:匹配s末尾的一个字符,继续使用该组合// 情况2:不匹配字符,丢弃该组合f[i][j] = f[i-1][j] || f[i][j-2];} else {// 只能丢弃该组合f[i][j] = f[i][j-2];}}}}return f[m][n];}
};