欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【我好惨】L2-008 最长对称子串(字符串处理,动态规划)

程序员文章站 2022-03-21 21:43:38
...

最长对称子串

题目

【我好惨】L2-008 最长对称子串(字符串处理,动态规划)

思路

【我好惨】L2-008 最长对称子串(字符串处理,动态规划)

代码

#include<iostream>
using namespace std;
int main(){
	string s;
	/*输入一行字符串包含空格*/
	getline(cin,s);
	
	int maxvalue=0; //最终回文子串长度 
	int temp; //记录回文子串长度的中介 
	int len=s.length();
	
	/*回文子串为奇数,
	以i为下标的字符为该回文子串的中间字符
	*/ 
	for(int i=0;i<len;i++){
		temp=1; //第i个字符算入,长度+1 
		for(int j=1;j<len;j++){
			/*第i-j个字符不存在
			第i+j个字符不存在
			第i个字符两边对称字符不相等
			*/
			if(i-j<0||i+j>=len||s[i-j]!=s[i+j])
				break;	//第i-j和第i+j两个字符不计入回文子串 
			/*第i-j和第i+j两个字符计入回文子串
			长度+2*/ 
			temp+=2;
		} 
		maxvalue=temp>maxvalue?temp:maxvalue;
		//maxvalue=max(temp,maxvalue); 
		
		/*回文子串为偶数,
		以i、i+1为下标的字符为该回文子串的中间对称字符
		*/
		temp=0; 
		for(int j=1;j<len;j++){
			/*i+1左边第j个字符不存在 
			i右边第j个字符不存在
			第i+1-j和第i+j两个对称字符不相等
			*/
			if(i+1-j<0||i+j>=len||s[i+1-j]!=s[i+j])
				break; //第i+1-j和第i+j两个字符不计入回文子串
			temp+=2; //两字符算入,长度+2 
		} 
		maxvalue=temp>maxvalue?temp:maxvalue;
	} 
	
	cout<<maxvalue;
	return 0;
} 

回顾回文数