默认思路
C++ 代码
#include <bits/stdc++.h>
#include<cstring>
#include <cstdio>
#define MAXSIZE 61392
using namespace std;
string load;
string inpt;
string tenet;
int mapJtoI[MAXSIZE];
bool isCh(char a)
{
if(a >='a' && a <='z') return 1;
else if(a >='A' && a <= 'Z') return 1;
return 0;
}
bool isSame(char a, char b)
{
if(a == b) return 1;
else if(a - b =='a'-'A') return 1;
else if(a - b =='A'-'a') return 1;
return 0;
}
int main()
{
ios::sync_with_stdio(false);
char tt;
while(scanf("%c", &tt) != EOF)
{
inpt += tt;
}
// getline(cin, inpt);
int len = inpt.size();
int j;
for(int i = 0,j = 0; i < len; i ++ )
{
if(isCh(inpt[i]))
{
load += inpt[i];
mapJtoI[j] = i;
j ++ ;
}
}
// cout<<load<<" a"<<endl;
int opp = 0, edp = 0;
int p1, p2;
int maxLen = 1;
tenet[0] = load[0];
int jLen = load.size();
bool clk = 1;
int nowLen;
int save;
// cout<<load<<endl;
for(int i = 0; i < jLen; i ++ )
{
nowLen = 1;
p1 = i - 1;
p2 = i + 1;
while(p1 >= 0 && p2 < jLen && (isSame(load[p1], load[p2])) )
{
p1 -- ;
p2 ++ ;
nowLen += 2;
}
if(nowLen > maxLen)
{
maxLen = nowLen;
opp = p1 + 1;
edp = p2 - 1;
save = i;
}
}
for(int i = 0; i < jLen; i ++ )
{
nowLen = 0;
p1 = i;
p2 = i + 1;
while(p1 >= 0 && p2 < jLen && (isSame(load[p1], load[p2])) )
{
p1 -- ;
p2 ++ ;
nowLen += 2;
}
if(nowLen > maxLen)
{
maxLen = nowLen;
opp = p1 + 1;
edp = p2 - 1;
save = i;
}
}
// for(int i = 0; i < len; i ++ ) cout<<mapJtoI[i]<<" ";
// cout<<endl;
// cout<<opp<<edp<<endl;
// cout<<mapJtoI[opp]<<' '<<mapJtoI[edp]<<endl;
cout<<maxLen<<endl;
// cout<<"save"<<save<<endl;
for(int i = mapJtoI[opp]; i <= mapJtoI[edp]; i ++ )
{
printf("%c", inpt[i]);
}
}