版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25453065/article/details/70197065
C++源码
#include <iostream>
#include <string>
using namespace std;
bool function(string str1,int p,string str2,int q)
{
int i,j;
for(i=q;i<str2.size();i++)
{
int k=i;
for(j=p;j<str1.size();j++)
{
//判断遇到?的情况,如果恰为最后一位,则返回true,否则跳过此位,判断下一位
if(str1[j]=='?')
{
if(j==str1.size()-1)
return true;
k++;
continue;
}
//判断遇到*的情况,如果恰为最后一位,则返回true,否则递归匹配剩余子串
if(str1[j]=='*')
{
if(j<str1.size()-1)
j++;
else
return true;
bool flag=false;//剩余子串是否匹配成功
while(!flag)
{
while(k<str2.size() && str1[j]!=str2[k])
k++;
if(k==str2.size())//全部遍历完成仍然未匹配到相同字符,则返回失败
return false;
flag=function(str1,j,str2,k);
k++;//如果第一次整体匹配失败,则寻找下一个相同的字符
}
return true;
}
if(str1[j]!=str2[k])
break;
else
k++;
}
if(j==str1.size())
return true;
}
return false;
}
int main()
{
string str1,str2;
cin>>str1>>str2;
if(function(str1,0,str2,0))
cout<<"true";
else
cout<<"false";
return 0;
}
由于OJ平台只有一个用例,测试虽然通过,但不知道是否还有其他BUG,欢迎指正~