UVA 455 Periodic Strings (KMP && 暴力陣列)
阿新 • • 發佈:2019-02-02
題意:給你字串,求最小迴圈節的字元個數
分析:看到關於迴圈節的第一反應就是KMP,其實這個題對範圍要求很小,所以可以暴力,把前面的字元與後面的字元進行比較,看是否一樣。最後不要忘記每一個數據後面的空行。
一:KMP
#include <cstdio> #include <cstring> using namespace std; int n; char str[100]; int next[100]; int len; void getNext() { int i = 0, j = -1; next[0] = -1; while (i != len){ if (j == -1 || str[i] == str[j]){ next[++i] = ++j; } else j = next[j]; } } int main() { scanf("%d", &n); while (n--){ scanf("%s", str); len = strlen(str); getNext(); if (len % (len - next[len]) == 0) printf("%d\n", len - next[len]); else printf("%d\n", len); if (n) printf("\n"); } return 0; }
二:陣列暴力
#include <cstdio> #include <cstring> using namespace std; int n; char str[100]; int main() { scanf("%d", &n); while (n--){ scanf("%s", str); int len = strlen(str); for (int i = 1; i <= len; i++){ if (len % i == 0){ int j; for (j = i; j < len; j++){ if (str[j] != str[j % i]){ break; } } if (j == len){ printf("%d\n", i); break; } } } if (n) printf("\n"); } return 0; }