传送门
题解:
挺好的一道思维题,我们先预处理出第i个位置下一个
a
−
z
a-z
a−z字母的下标。然后就可以快速判断了。last数组代表当前字母的最前位置。
#include <bits/stdc++.h>
using namespace std;
const int N=1000100+7;
int f[N][27],last[30];
string a,b;
void init(){
memset(last,-1,sizeof last);
int len=(int)a.length();
for(int i=len-1;i>=0;i--){
for(int j=0;j<26;j++){
f[i][j]=last[j];
}
last[a[i]-'a']=i;
}
}
bool work(string b)
{
int len=(int )b.length();
int pos=last[b[0]-'a'];
if(pos==-1) return 0;
for(int i=1;i<len;i++){
pos=f[pos][b[i]-'a'];
if(pos==-1) return 0;
}
return 1;
}
signed main()
{
cin>>a;
init();
int n; cin>>n;
for(int i=1;i<=n;i++){
cin>>b;
if(work(b)) puts("Yes");
else puts("No");
}
}