最大回文长度计算
给一个字符串,判断该字符串的最大回文长度
Input Specification:
输入一个字符串
Output Specification:
输出一个数字,表示最大回文长度
Sample Input 1:
ABCBA
Sample Output 1:
5
Sample Input 2:
ABCBD
Sample Output 2:
3
代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str, tmp;
while(cin >> tmp) {
//处理字符串,每个字符之间插一个 “#”
str = "#";
for(int i = 0; i < tmp.size(); ++i) {
str = str + tmp[i] + "#";
}
// cout << str << endl;
int maxlength = 1, tmplength;
//str[0]左边没有字符,必定只是长度为1的回文,所以直接从str[1]开始寻找
for(int i = 1; i < str.size(); ++i) {
//判断从当前位置到字符串的最后的长度是不是比目前已求出的最长回文子串长度小
//如果是的,就没有比较的意义了,直接退出循环
if(i + maxlength >= str.size()) break;
//如果按照已求出的最大回文长度来算,不能满足一下条件,说明在i这个位置,最长的回文长度也就是maxlength-1,所以不考虑,跳过
if(str[i-maxlength] != str[i+maxlength]) continue;
else {
//代码能进行到这,说明i这个位置为回文中心,是有突破当前已求出的最长回文长度的可能的,下面进行求解
tmplength = 1;
//注意判断不要数组越界
while(i+tmplength < str.size() && str[i-tmplength] == str[i+tmplength])
tmplength++;
//退出循环的时候,是发生了不等于的情况,所以需要在tmplength基础上-1
tmplength--;
}
maxlength = max(maxlength, tmplength);
}
cout << maxlength << endl;
}
return 0;
}