题解 | #月月查华华的手机#

月月查华华的手机

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;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-25 13:59
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务