• Theme Section


    题意:

    就是每一首歌都是EAEBE这样的类型,其中A和B可以没有,就是让你找出来E的最大长度

    题解:

    第一种思路:

    可以先找出来头和尾的最大相同程度,最小可以从1开始,最大小于len/3

    然后再利用kmp算法找出来中间有没有相同部分就可以了

    但是这一种方法太麻烦了,还有切割字符串,看下面

    第二种:

    我们可以先通过kmp求出来他的next数组

    这样前缀和后缀的E就已经满足了,只需要在中间找到next[i]也等于next[len]

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<algorithm>
     5 using namespace std;
     6 const int maxn=1e6+10;
     7 char ptr[maxn];
     8 int nnn[maxn];
     9 void get_next(int plen)
    10 {
    11     int i=0,j;
    12     j=nnn[0]=-1;
    13     while(i<plen)
    14     {
    15         while(j!=-1 && ptr[i]!=ptr[j]) j=nnn[j];
    16         nnn[++i]=++j;
    17     }
    18 }
    19 int kmp(int plen)
    20 {
    21     get_next(plen);
    22     for(int k=nnn[plen];k;k=nnn[k])
    23     {
    24         //printf("%d %d %d
    ",k,2*k-1,plen-k);
    25         for(int i=2*k-1;i<plen-k;++i)
    26         {
    27             if(nnn[i]+1==k)
    28                 return k;
    29         }
    30     }
    31     return 0;
    32 }
    33 int main()
    34 {
    35     int t;
    36     scanf("%d",&t);
    37     while(t--)
    38     {
    39         scanf("%s",ptr);
    40         int len=strlen(ptr);
    41         int q=kmp(len);
    42         printf("%d
    ",q);
    43     }
    44     return 0;
    45 }
    View Code
  • 相关阅读:
    记Git报错-Everything up-to-date
    开发相关的绝赞网站和框架
    记Git报错-refusing to merge unrelated histories
    Nodejs和npm入门使用
    【转】什么是JavaScript
    CSS学习摘要-定位实例
    golang 文件服务器
    golang postgresql CRUD
    golang sqlite3 CRUD
    psql: 致命错误: 对用户"user1"的对等认证失败
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/11270974.html
Copyright © 2020-2023  润新知