每日AC

许诺  •  1个月前


#include <iostream>
#include <vector>
#include <string>

using namespace std;

bool isMatch(string s, string p) {

int m = s.size(), n = p.size();
vector<vector<bool>> dp(m + 1, vector<bool>(n + 1, false));
dp[0][0] = true;
// 初始化第一行,处理模式p可能匹配空字符串的情况
for (int j = 1; j <= n; ++j) {
    if (p[j-1] == '*' && j >= 2) {
        dp[0][j] = dp[0][j-2];
    }
}
// 填充dp数组
for (int i = 1; i <= m; ++i) {
    for (int j = 1; j <= n; ++j) {
        if (p[j-1] == '*') {
            // 处理'*'的情况
            if (j >= 2) {
                bool matchZero = dp[i][j-2];
                bool matchMore = (s[i-1] == p[j-2] || p[j-2] == '.') && dp[i-1][j];
                dp[i][j] = matchZero || matchMore;
            }
        } else {
            // 处理普通字符或'.'的情况
            dp[i][j] = (s[i-1] == p[j-1] || p[j-1] == '.') && dp[i-1][j-1];
        }
    }
}
return dp[m][n];

}

int main() {

string s, p;
cin >> s >> p;
cout << (isMatch(s, p) ? "true" : "false") << endl;
return 0;

}


评论:

请先登录,才能进行评论