Pagini recente » Cod sursa (job #3334036) | Cod sursa (job #783284) | Cod sursa (job #196242) | Cod sursa (job #1832653) | Cod sursa (job #3347371)
#include <fstream>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
int t;
string s;
int lps[1000005];
int pref[1000005];
void test()
{
in>>s;
for(int i = 0; i<s.size(); i++)
{
lps[i] = pref[i] = 0;
}
int i = 1;
int j = 0;
while(i < s.size())
{
if(s[i] == s[j])
{
j++;
lps[i] = j;
i++;
}
else
{
if(j == 0)
{
i++;
}
else
{
j = lps[j - 1];
}
}
}
// for(int i = 0; i<s.size(); i++)
// {
// out<<lps[i]<<" ";
// }
// out<<'\n';
int ans = 0;
for(int i = 0; i<s.size(); i++)
{
if(lps[i] == 0)
{
pref[i] = i + 1;
}
else
{
int len = i - lps[i] + 1;
if(pref[lps[i - 1]] == len || len == lps[i - 1] + 1)
{
ans = max(ans, i + 1);
pref[i] = len;
}
else
{
pref[i] = -1;
}
}
}
out<<ans<<'\n';
}
int main()
{
in>>t;
while(t--)
{
test();
}
return 0;
}