题目链接:http://codeforces.com/contest/832/problem/B
题意:
首行给你一些小写字母,good character
第二行给你一段A字符串,含有小写字母 ? *
?只能匹配一个good character
* 匹配空串和一段非good character
再给你n个字符串,问各个字符串是否能和A串匹配
题解:
按照题意模拟就好,*可以匹配字符或字符串
长度最好特判一下
代码
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
using namespace std;
const int maxn = 1e5+100;
char s[maxn],st[maxn];
bool good[maxn];
int len,lst,n;
int main()
{
scanf("%s",s);
len = strlen(s);
for (int i=0;i<len;i++) good[s[i]] = true;
scanf("%s",st);
lst = strlen(st);
scanf("%d",&n);
while (n--)
{
scanf("%s",s);
len = strlen(s);
bool flag = false;
int i=0,j=0;
if (lst > len+1)
{
printf("NO\n");
continue;
}
while (i < lst || j < len)
{
if (st[i] == '*')
{
for (int k=i;k<=i+len-lst;k++,j++)
{
if (good[s[k]])
{
flag = true;
break;
}
}
if (flag) break;
i++;
}
else
{
if ((st[i] == '?' && good[s[j]]) || (s[j] == st[i])) i++,j++;
else
{
flag = true;
break;
}
}
}
if (flag) printf("NO\n");
else
printf("YES\n");
}
return 0;
}
纪念第一道没写特判而wa了一晚上的模拟题