49分求助
查看原帖
49分求助
497332
利姆露·三上悟楼主2021/8/7 14:21
#include<bits/stdc++.h>
using namespace std; 
char s[70001],a[70001];
int sit[70001],p[5001][5001],lens,lena,maxn,i=1,j=1,start;
int main()
{
    while (scanf("%c",&s[i])!=EOF)
	{
		if (s[i]>='A'&&s[i]<='Z')
		a[j]=s[i]+32,sit[j]=i,p[j][j]=1,j++;
		if (s[i]>='a'&&s[i]<='z')
		a[j]=s[i],sit[j]=i,p[j][j]=1,j++;
		//p[j][j]=1,表示j开始到j结束的一定是回文 
		i++;
	} 
	lens=i,lena=j-1;
    for(i=1;i<=lena;i++)
    {
    	//i是长度 
    	for(j=1;j<=lena;j++)
    	{
    		//j是起始 
    		int e=i+j-1;//计算到几结束 
    		if(p[j+1][e-1]&&a[j]==a[e])p[j][e]=1;
    		if(p[j][e]){maxn=max(maxn,e-j+1);start=j;}
    		//找回文 
		}
	}
	printf("%d \n",maxn);
	for(int ss=sit[start];ss<=sit[start+maxn-1];ss++)
	printf ("%c",s[ss]);
	return 0;
}
2021/8/7 14:21
加载中...