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,歡迎指正~