题解 | 字符串通配符

字符串通配符

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

#include <iostream>
#include <bits/stdc++.h>
#include <string>
#include <vector>
using namespace std;

bool isMatch = false;
void deepSearch(string& ss, string& sp, int cur_ss, int cur_sp) {
    if (isMatch)
        return ;
    if (cur_sp == sp.size() && cur_ss == ss.size()) {
        isMatch = true;
        return ;
    }
    if (cur_sp >= sp.size() || cur_ss >= ss.size()) 
        return ;
        
    char c1 = ss[cur_ss], c2 = sp[cur_sp];
    if (c1 != '*' && c1 != '?') {
        if (c1 == c2) {
            deepSearch(ss, sp, cur_ss + 1, cur_sp + 1);
        } else {
            return ;
        }
    }
    if (c1 == '*') {
        if(cur_ss == ss.size() - 1){
            isMatch = true;
            return ;
        }
        if (c2 >= 'a' && c2 <= 'z' || c2 >= '0' && c2 <= '9') {
            for (int i = cur_sp; i < sp.size(); ++i) {
                deepSearch(ss, sp, cur_ss + 1, i);
            }
        }
    }
    if (c1 == '?') {
        if (c2 >= 'a' && c2 <= 'z' || c2 >= '0' && c2 <= '9') {
            deepSearch(ss, sp, cur_ss + 1, cur_sp + 1);
        }
    }
    return ;
}

int main() {
    string s, sp, ss;
    cin >> s >> sp;
    for (auto& c : s) {
        if (c >= 'A' && c <= 'Z')
            c = c - 'A' + 'a';
        if(c == '*'){
            if(!ss.empty() && ss.back() == '*')
                continue;
        }
        ss.push_back(c);
    }
    for (auto& c : sp) {
        if (c >= 'A' && c <= 'Z')
            c = c - 'A' + 'a';
    }
    deepSearch(ss, sp, 0, 0);
    if (isMatch)
        cout << "true" << endl;
    else {
        cout << "false" << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务