许诺 • 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;
}
评论:
请先登录,才能进行评论