• hdu 6208 上一个kmp模板


    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <queue>
    #include <map>
    using namespace std;
    int Next[100010];
    string s[100010];
    void getNext(string s)
    {
        int i,j;
        i=0;
        j=-1;
        int len=s.length();
        Next[0]=-1;
        while(i<len && j<len)
        {
            if(j==-1 || s[i]==s[j]) Next[++i]=++j;
            else j=Next[j];
        }
    }
    bool kmp(string m,string s)
    {
        getNext(s);
        int i,j;
        i=j=0;
        int mlen=m.length();// i
        int slen=s.length();// j
        while(i<mlen && j<slen)
        {
            if(j==-1 || m[i]==s[j]) i++,j++;
            else j=Next[j];
        }
        if(j==slen) return false;
        return true;
    }
    int main()
    {
        cin.sync_with_stdio(false);
        int t;
        cin>>t;
        while(t--)
        {
            int n;
            cin>>n;
            string ms;
            int mlen;
            int flag=1;
            for(int i=1;i<=n;i++)
            {
               cin>>s[i];
               if(i==1)
               {
                   mlen=s[i].length();
                   ms=s[i];
               }
               else
               {
                   int len=s[i].length();
                   if(len > mlen)
                   {
                       mlen=len;
                       ms=s[i];
                   }
               }
            }
            flag=1;
            for(int i=1;i<=n;i++)
            {
                //string now=q.front();
                //q.pop();
                string now=s[i];
                int len=now.length();
                if(len==mlen && now != ms)
                {
                    flag=0;
                    break;
                }
                //mq.push(now);
            }
            if(flag==0) cout<<"No"<<endl;
            else
            {
                int zflag=1;
                for(int i=1;i<=n;i++)
                {
                    string now=s[i];
                    if(kmp(ms,now))
                    {
                        zflag=0;
                        break;
                    }
                }
                if(zflag==0) cout<<"No"<<endl;
                else cout<<ms<<endl;
            }
        }
        return 0;
    }
    // 补一发 kmp记录字串个数的
  • 相关阅读:
    Java 基础知识总结
    AppScan-文件参数Shell命令注入
    AndroidKiller-下载使用
    代码技巧之常用快捷键的整理
    z-index的特点
    定位元素的异同点
    定位之固定定位
    定位之相对定位
    clear的值和特点及伪元素before和after的使用
    如何让元素消失在我们的视野中(面试题)
  • 原文地址:https://www.cnblogs.com/z1141000271/p/7542198.html
Copyright © 2020-2023  润新知