参考之前一些递归的做法,但有的样例过不了。发现题目里面强调了?只能够匹配数字和字母,所以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; } } }