题解 | #月月查华华的手机#
月月查华华的手机
https://ac.nowcoder.com/acm/problem/23053
#include<bits/stdc++.h>
#include<iostream>
#include<cstring>
using namespace std;
int nxt[1001000][40];//存放字符串的各位之后26个字母的最近位置
int last[40];//最后last保存的是整个字符串各字母第一次出现的位置
int main()
{
string s;
cin>>s;
int num;
cin>>num;
memset(last,-1,sizeof(last));
for(int j=s.length()-1;j>=0;j--)
{
for(int i =0;i<26;i++)
{
nxt[j][i] = last[i];
}
last[s[j]-'a'] = j;
}//求华华昵称各位之后26个字母的最近位置
for(int i=0;i<num;i++)//num个推荐好友
{
string s1;
cin>>s1;
int pos = last[s1[0]-'a'];
int flag=1;
for(int k=1;k<s1.length();k++)
{
pos = nxt[pos][s1[k]-'a'];
if(pos==-1)
{
flag=0;
cout<<"No"<<endl;
break;
}
}
if(flag)
cout<<"Yes"<<endl;
}
return 0;
}