题意:
每次给出一个字符串,
然后给出n个字符串,是否符合这个字符串的格式
(1<=n<=300)
每次给出的字符串,如果有字符 ‘ ?’ 那就是代表这里有一个字符,
如果有字符 ‘ * ’ 那就代表这里有零个或多个字符。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
const int maxn=310;
typedef long long ll;
int n,t,m;
string str,s;
ll ans;
bool ac(string a,string b){
for(int i=0;i<a.size();i++){
if(a[i]=='*'){
if(i==a.size()-1) return true;
string c=a.substr(i+1);
for(int j=i;j<a.size();j++){
if(ac(c,b.substr(j))) return true;
}
}
else{
if(i>=b.size()) return false;
if(a[i]=='?') continue;
if(a[i]!=b[i]) return false;
}
}
return true;
}
int main()
{
while(cin>>str){
ans=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>s;
if(ac(str,s)) ans++;
}
cout<<ans<<endl;
}
return 0;
}
熟悉一下substr的使用