[BOI2009] Radio Transmission 无线传输 - 洛谷
[BOI2009] Radio Transmission 无线传输
题目描述
给你一个字符串 s_1,它是由某个字符串 s_2 不断自我连接形成的(保证至少重复 2次)。但是字符串 s_2是不确定的,现在只想知道它的最短长度是多少。
输入格式
第一行一个整数 L,表示给出字符串的长度。
第二行给出字符串 s_1 的一个子串,全由小写字母组成。
输出格式
仅一行,表示 s_2 的最短长度。
样例 #1
样例输入
8
cabcabca
样例输出
3
提示
样例输入输出 1 解释
对于样例,我们可以利用 abc 不断自我连接得到 abcabcabcabc,读入的 cabcabca,是它的子串。
规模与约定
对于全部的测试点,保证1<= L<= 10^6。
代码区:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int next[1000005];
int NEXT( char *str,int *next){int i=0,j=-1;next[0]=-1;int len=strlen(str);while(i<len){if(j==-1||str[i]==str[j]){++i;++j;next[i]=j;}else{j=next[j];}}return len-next[len];}
int main(){int n;scanf("%d",&n);char *str=(char*)malloc(sizeof(char)*(n+1));scanf("%s",str);printf("%d",NEXT(str,next));return 0;
}