Power Strings - POJ 2406 - Virtual Judge
next数组是返回与当前子串相等的上一个前缀的下一个字符的地方,所以利用这个性质便可以求得最长的题目要求的字符串
AC代码:
#include <iostream> #include <string> #include <cstring> #include <vector> #include <cstdio> #include <stdio.h> #include <string.h> using namespace std; const int N = 1000010; char s[N]; int next1[N]; int main() { //ios::sync_with_stdio(false); //cin.tie(nullptr);cout.tie(nullptr); while (scanf("%s", s)) { int len = strlen(s); if (s[0] == '.') { break; } int ans; int j = 0, k = -1; next1[0] = -1; while (j < len) { if (k == -1 || s[j] == s[k]) { j++; k++; next1[j] = k; } else { k = next1[k]; } } if (len % (len - next1[len]) == 0) { ans = len / (len - next1[len]); } else { ans = 1; } cout << ans << '\n'; } return 0; }
POJ2406 (KMP的next数组)
于 2022-04-06 20:14:30 首次发布