在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。
给定一个字符串 (s) 和一个字符模式 §,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。
‘?’ 可以匹配任何单个字符;
‘*’ 可以匹配任意字符串;
bool isMatchWildcard(std::string s, std::string p) {
int l1 = static_cast<int>(s.size());
int l2 = static_cast<int>(p.size());
std::vector<std::vector<bool>> dp(l1 + 1, std::vector<bool>(l2 + 1, false));
dp[0][0] = true;
for (int j = 1; j < l2 + 1; j++) {
if (p[j - 1] == '*') { dp[0][j] = dp[0][j - 1]; }
}
for (int i = 1; i < l1 + 1; i++) {
for (int j = 1; j < l2 + 1; j++) {
if (p[j - 1] == '?' || p[j - 1] == s[i - 1]) {
dp[i][j] = dp[i - 1][j - 1];
} else if (p[j - 1] == '*') {
dp[i][j] = dp[i - 1][j] || dp[i][j - 1];
}
}
}
return dp.back().back();
}