题目的意思是先给出一个字符串表示好字母,'?'可以表示任何好字母,'*'表示任何不好字母的串,问每次查询是否更由原字符串得到
思路:因为只有一个‘*’,直接判
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
using namespace std;
#define LL long long
#define mem(a,b) memset(a,b,sizeof a)
const int INF = 0x3f3f3f3f;
#define MAXN 100100
#define MAXM 1000100
char a[100005];
char b[100005];
int fl[1000];
int main()
{
int n;
while(~scanf("%s",a))
{
mem(fl,0);
int k1=strlen(a);
for(int i=0; i<k1; i++)
fl[a[i]]=1;
scanf("%s",a);
k1=strlen(a);
scanf("%d",&n);
while(n--)
{
scanf("%s",b);
int k2=strlen(b);
int flag=0;
int i=0,j=0;
while(j<k2)
{
if(a[i]=='*')
{
for(int q=0; q<k2-k1+1; q++)
{
if(fl[b[j]]==1)
{
flag=1;
break;
}
j++;
}
i++;
continue;
}
if(j>=k2)
break;
i++,j++;
if((a[i-1]=='?'&&fl[b[j-1]]==1)||a[i-1]==b[j-1])
continue;
flag=1;
if(flag)
break;
}
if(i<k1&&(k1-k2>1||a[k1-1]!='*'))
flag=1;
if(flag)
printf("NO\n");
else
printf("YES\n");
}
}
return 0;
}