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

最长回文子串的长度

时间限制(普通/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;
}



你可能感兴趣的:(ACM,最长回文子串,南邮OJ)