Pagini recente » Cod sursa (job #1000849) | Cod sursa (job #2469253) | Cod sursa (job #1780221) | Cod sursa (job #2761079) | Cod sursa (job #2985624)
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int n;
string s;
int lps[1000005];
void Init() {
memset(lps, 0, sizeof(lps));
}
void Solve() {
Init();
fin >> s;
s = '$' + s;
int ans = 0;
int len = s.length();
for (int i = 2; i < len; i++) {
int currLetter = s[i];
int currLpsIdx = lps[i - 1];
while (currLpsIdx && currLetter != s[currLpsIdx + 1]) {
currLpsIdx = lps[currLpsIdx];
}
if (currLetter == s[currLpsIdx + 1]) {
currLpsIdx++;
}
lps[i] = currLpsIdx;
int subLen = i - lps[i];
if (lps[i] != 0 && i % subLen == 0) {
ans = i;
}
}
fout << ans << '\n';
}
int main() {
fin >> n;
for (int i = 0; i < n; i++) {
Solve();
}
}