【KMP】Radio Transmission

问题 L: 【KMP】Radio Transmission

时间限制: 1 Sec  内存限制: 128 MB
提交: 34  解决: 7
[提交] [状态] [讨论版] [命题人:admin]

题目描述

给你一个字符串,它是由某个字符串不断自我连接形成的。但是这个字符串是不确定的,现在只想知道它的最短长度是多少。

输入

第一行给出字符串的长度L,第二行给出一个字符串,全由小写字母组成。

输出

输出最短的长度。

样例输入

8
cabcabca

样例输出

3

提示

我们可以利用abc不断自我连接得到abcabcabc,读入的cabcabca是它的子串。

对于全部数据,1≤L≤106

#include <bits/stdc++.h>
 
using namespace std;
 
char p[1000005];
int lenp;
int Next[1000005];
void get_next()
{
    int i,j;
    Next[0] = j = -1;
 
    i = 0;
    while(i<lenp)
    {
        while(j!=-1&&p[j]!=p[i])
            j = Next[j];
        Next[++i] = ++j;
    }
}
 
int main()
{
    int n;
    cin>>n;
 
    scanf("%s",p);
    lenp = strlen(p);
 
    get_next();
//    for(int i=0;i<lenp;i++)
//    {
//        cout<<Next[i]<<" ";
//    }
    cout<<n-Next[n];
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/hao-tian/p/9647341.html
今日推荐