您的位置:首页 > 其它

南邮 OJ 1968 最长回文子串的长度

2015-08-07 10:33 323 查看


最长回文子串的长度

时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte

总提交 : 391 测试通过 : 84

比赛描述

输入一个字符串,求出其中最大回文子串的长度。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同,如abba和yyxyy。在判断时,应该忽略所有标点符号和空格,且忽略大小写,但输出应保持原样(在回文串的首部和尾部不要输出多余字符)。

输入

输入字符串长度不超过5000,且占据单独的一行。

输出

输出最长回文串的长度,该回文串不包括所有标点符号和空格。

样例输入

Confuciuss say: Madam,I'm Adam.

样例输出

11

提示

undefined

题目来源

NUPT

tring>
using namespace std;

int main(){
int i,j,n,max;
string s;
getline(cin,s);
n=(int)s.length();
for(i=0,j=0;i<n;i++){
if(s[i]>='a' && s[i]<='z'){
s[j++]=s[i];
}else if(s[i]>='A' && s[i]<='Z'){
s[j++]=s[i]-'A'+'a';
}
}
n=j;
max=1;
for(i=1;i<n;i++){
for(j=1; i-j>=0 && i+j<n && s[i+j]==s[i-j]; j++);
j--;
if(max<2*j+1){
max=2*j+1;
}
for(j=1; i-j>=0 && i-1+j<n && s[i-j]==s[i-1+j]; j++);
j--;
if(max<2*j){
max=2*j;
}
}
cout<<max<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: