Radio_Transmission
这是PTA上的P4391
这个题在想明白之后算是一道比较简单的题,就是对给你的字符串写出他的next数组,然后用字符串的长度减去最后一个字符对应的next值;
可以理解为把中间所有重复的部分全部删除,只留下一个完整的周期和另一个重复的部分(不知道是否完整,不影响结果),因为中间重复的过程会同时增加后续最后一个字符串对应的next值和该字符串的长度,那么对于删减后的字符串来说用字符串长度减去后面重复部分的长度就是最小重复长度
#include<bits/stdc++.h> using namespace std; int n; string s2; const int N = 1e6 + 10; int Next[N] = { 0 }; void getNext() { int i = 1, j = 0; while (i < n) { if (s2[i] == s2[j]) { Next[i] = j + 1; i++; j++; } else if (s2[i] != s2[j]) { if (j == 0) { Next[i] = 0; i++; } else { j = Next[j - 1]; } } } } int main() { cin>>n>>s2; getNext(); cout<<n-Next[n-1]<<endl; }