Pagini recente » Cod sursa (job #3296012) | Cod sursa (job #3243085) | Cod sursa (job #1865239) | Cod sursa (job #3312014) | Cod sursa (job #3301933)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
vector<int> compute_lps(const string &pattern)
{
vector<int> lps(pattern.size(), 0);
int k = 0;
for(int i = 1; i < pattern.size(); i++)
{
while(k > 0 && pattern[i] != pattern[k])
k = lps[k - 1];
k += (pattern[i] == pattern[k]);
lps[i] = k;
}
return lps;
}
void solve_testcase()
{
string s;
fin >> s;
vector<int> lps = compute_lps(s);
int max_length = 0;
for(int i = 1; i < s.size(); i++)
{
int k = lps[i], length = i + 1, period = length - k;
if(k > 0 && length % period == 0)
max_length = length;
}
fout << max_length << "\n";
}
int main()
{
int t;
fin >> t;
while(t--)
solve_testcase();
fin.close();
fout.close();
return 0;
}