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