参考之前一些递归的做法,但有的样例过不了。发现题目里面强调了?只能够匹配数字和字母,所以12行和19行需要单独判断一下。因为可以直接跳过,所以19行这里不能直接返回fasle。
到这一步的运行时间满足不了要求,15到17行把连续的*处理了一下就过了。

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

bool match(const char *pattern,const char *str)
{
   if(*pattern== '\0' && *str == '\0')
        return true;
   if(*pattern== '\0'||*str == '\0')
        return false;
    if(*pattern =='?'){
        if(!isdigit(*str) && !isalpha(*str)) return false;
        return match(pattern+1,str+1);
    }else if(*pattern =='*'){
        while(*pattern=='*'){
            pattern++;
        }
        pattern--;
        if(!isdigit(*str) && !isalpha(*str)) return match(pattern+1,str); 
        return match(pattern+1,str) || match(pattern+1,str+1)||match(pattern,str+1);
    }else if(tolower(*pattern) == tolower(*str)){
        return match(pattern+1,str+1);
    }
    return false;
}

int main()
{
    string pattern,str;
    while(cin>>pattern>>str){
        bool ret = match(pattern.c_str(),str.c_str());
        if(ret){
            cout<<"true"<<endl;
        }else{
            cout<<"false"<<endl;
        }
    }
}