月月查华华的手机

Posted 满天星!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了月月查华华的手机相关的知识,希望对你有一定的参考价值。

月月查华华的手机
在这里插入图片描述
输入

noiauwfaurainairtqltqlmomomo
8
rain
air
tql
ntt
xiaobai
oiiiooo
orzcnzcnznb
ooooo

输出

Yes
Yes
Yes
Yes
No
Yes
No
No

在这里插入图片描述
思路:

序列自动机看看这篇博客关于序列自动机

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
string s,t;
int ne[N][30];
int tree[30];//在字符串最前面出现的位置
void build()//建树
{ memset(tree,-1,sizeof(tree));//初始化未出现的字符
	//处理每一个字符
    for(int i=s.length();i>=0;i--)
    {
//找出第i个字符后面的26个字母最早出现的字符的位置
    for(int j=0;j<26;j++)
    ne[i][j]=tree[j];
 //用当前字符更新当前字符在原串中从后向前最晚出现的位置
        tree[s[i]-'a']=i;
    }
}
bool check()//查询子序列
{
    int start=tree[t[0]-'a'];//start为t第一个字符位置
    if(start==-1)
    return false;//第一个字符不在s中
    for(int i=1;i<t.length();i++)
    {
    start=ne[start][t[i]-'a'];//位置移动的下一个字符的位置
       if(start==-1)
       return false;
    }
    return true;
}
int main()
{
    int n;
   getline(cin,s);
    build();
    cin>>n;
    while(n--)
    {
        cin>>t;
        if(check())
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }return 0;
}

以上是关于月月查华华的手机的主要内容,如果未能解决你的问题,请参考以下文章

华华给月月准备礼物

华华给月月出题

牛客白月赛12题解

NC23054 华华开始学信息学

2021算法竞赛入门班第二节课递归分治二分练习题

4.18 每日一题题解