思路:
代码:
int lcp[5050][5050];
void solve()
{
string s;
cin>>s;
int n = s.length();
for(int i = 0;i<=n;i++) lcp[i][n] = 0;
for(int i = n-1;i>=0;i--)
{
for(int j = n-1;j>=i;j--)
{
if(s[i]==s[j]) lcp[i][j] = lcp[i+1][j+1] + 1;
else if(s[i]=='?'||s[j]=='?') lcp[i][j] = lcp[i+1][j+1] + 1;
else lcp[i][j] = 0;
}
}
int ans = 0;
for(int i = 0;i<n;i++)
{
for(int len = 1;i+len<n;len++)
{
int j = i+len;
if(lcp[i][j]>=len) ans = max(ans,len);
}
}
cout<<2*ans<<'\n';
}