【我好惨】L2-008 最长对称子串(字符串处理,动态规划)
程序员文章站
2022-03-21 21:43:38
...
题目
思路
代码
#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;
}