题解 | #字符串通配符#

字符串通配符

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

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

bool chCop(char a, char b) {
    if (a == b) {
        return true;
    }
    char temp1, temp2;
    if (isalnum(a) && isalnum(b)) {

        if (islower(a)) {
            temp1 = toupper(a);
        } else {
            temp1 = a;
        }

        if (islower(b)) {
            temp2 = toupper(b);
        } else {
            temp2 = b;
        }

        if (temp1 == temp2) {
            return true;
        }
    }
    return false;
}

int main() {
    string str, pattern;
    getline(cin, pattern);
    getline(cin, str);

    vector<vector<bool>> dp(pattern.size() + 1, vector<bool>(str.size() + 1,
                            false));

    dp[0][0] = true;
    for (int i = 1; i <= pattern.size(); i++) {
        dp[i][0] = dp[i - 1][0] && (pattern[i - 1] == '*');
        for (int j = 1; j <= str.size(); j++) {
            if (pattern[i - 1] == '*' && isalnum(str[j - 1])) {
                dp[i][j] = dp[i - 1][j] || dp[i][j - 1] || dp[i - 1][j - 1];
            } else if (pattern[i - 1] == '?' && isalnum(str[j - 1])) {
                dp[i][j] = dp[i - 1][j - 1];
            } else {
                dp[i][j] = chCop(pattern[i - 1], str[j - 1]) && dp[i - 1][j - 1];
            }
        }
    }

    if (dp[pattern.size()][str.size()]) {
        cout << "true" << endl;
    } else {
        cout << "false" << endl;
    }
}

dp数组,dp[i][j]表示以pattern[i-1]为尾巴,str[j-1]为尾巴的字符串是否匹配

// 初始化

// dp[0][0] 为真,0匹配0可行

// dp[0][j] 为假,0无法匹配任何字符串

// if(pattern[i-1] 和 str[j-1]完全相同)

// 如果dp[i-1][j-1]为真,则dp[i][j]为真

// else if(pattern[i]== '*'且str[j-1]是字母或数字)

// dp[i-1][j](匹配0个字符)

// 或者 dp[i][j-1](匹配任意多字母)

// 或者dp[i-1][j-1] (匹配一个字符)

// 任意一个情况符合即可

// else if(pattern[i] == '?'且str[j-1]是字母或数字)

// dp[i][j] = dp[i-1][j-1]

华为机试刷题记录 文章被收录于专栏

记录一下手打代码的解题思路方便复习

全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 14:09
华为 2012 算子开发 (20+5)*14-16 硕士211
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务