题解 | #字符串通配符#

字符串通配符

https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
    string pat;
    string tar;

    getline(cin, pat);
    getline(cin, tar);

    vector<vector<bool>> dp(pat.size() + 1, vector<bool>(tar.size() + 1, false));
    dp[0][0] = true;
    for (int i = 1; i <= pat.size(); ++i) {
        dp[i][0] = dp[i - 1][0] && pat[i - 1] == '*';
        for (int j = 1; j <= tar.size(); ++j) {
            if (pat[i - 1] == '*') {
                dp[i][j] = dp[i][j - 1] || dp[i - 1][j];
            }
            else if (pat[i - 1] == '?') {
                dp[i][j] = dp[i - 1][j - 1] && (isalpha(tar[j - 1]) || isdigit(tar[j - 1]));
            }
            else if (isalpha(pat[i - 1])) {
                dp[i][j] = dp[i - 1][j - 1] && isalpha(tar[j - 1]) && tolower(tar[j - 1] == tolower(pat[i - 1]));
            }
            else {
                dp[i][j] = dp[i - 1][j - 1] && tar[j - 1] == pat[i - 1];
            }
        }
    }
    cout << boolalpha << dp[pat.size()][tar.size()] << endl;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

我即大橘:耐泡王
点赞 评论 收藏
分享
微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务