L2-008 最长对称子串

题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805067704549376
参考链接:https://blog.csdn.net/king_cannon_fodder/article/details/75893967
最重要的是要考虑对称子串既有可能是奇数长度的,又有可能是偶数长度的!!!
AC代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int len;  //字符串的长度 
	int maxLen;  //回文串的最大长度 
	string s;   //输入的字符串
	while(getline(cin,s))
	{
		maxLen=0;  //初始化最长对称子串长度为0 
		len=s.length();
		for(int i=0;i<len;i++)  //遍历每个位置以作为对称子串的中心点 
		{
			for(int j=0;j<=i&&i+j<len;j++)  //奇数长度的对称子串 
			{
				if(s[i-j]!=s[i+j])  break;  //如果不对称,结束 
				if(2*j+1>maxLen)  maxLen=2*j+1;  //更新长度,因为是奇数,所以左右两边扩展的长度是j,加上中心点一个,就是2*j+1 
			}
			for(int j=0;j<=i&&i+j+1<len;j++)  //偶数长度的对称子串 
			{
				if(s[i-j]!=s[i+j+1])  break; //如果不对称,结束 
				if(2*(j+1)>maxLen)  maxLen=2*(j+1); //更新长度,因为是偶数,所以左右两边扩展的长度都是j+1 
			}
		}
		cout<<maxLen<<endl;
	} 
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_39905917/article/details/88592236