Description
There is a string. the length of a is less than 1,000,000. I rewrite it again and again. then I got a new string: aaaaaa ...... now I cut it from two different position and get a new string B. then, give you the string B, can you tell me the length of the shortest possible string. for example, a = "abcdefg ". I got ABCD
EfgabcdefgabcdeFgabcdefg... then I cut the red part: efgabcdefgabcde as string B. From B, you shoshould find out the shortest.
Input
Multiply test cases. For each line there is a string B which contains only lowercase and uppercase charactors. The length of B is no more than 1,000,000.
Output
For each line, output an integer, as described above.
Sample Input
bcabcabefgabcdefgabcde
Sample output
37. There is a string a, and a is used to form a new string AAAAA ..., now we can get string B from the two different positions of the new string. The minimum length of A is calculated as follows, the ring sentence is the minimum cycle of B.#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1000005;char pattern[maxn];int next[maxn];int main() {while (scanf("%s", pattern) != EOF) {int m = strlen(pattern);next[0] = next[1] = 0;for (int i = 1; i < m; i++) {int j = next[i];while (j && pattern[i] != pattern[j])j = next[j];next[i+1] = pattern[i] == pattern[j] ? j+1 : 0;}printf("%d\n", m-next[m]);}return 0;}
HUST-1010 the minimum length