您的位置:首页 > 其它

字符串处理------最长回文子串

2016-06-20 15:37 411 查看
题目描述:

给定一个字符串,求它的最长回文子串的长度.

方法一:中心扩展法.

由于回文串中,以某个字符为中心的前缀和后缀一定是相同字符。可以利用此方法枚举中心位置,然后进行扩展,从而找到最长回文子串。

#include <iostream>
#include <string>
using namepace std;

int longestPalindrome(string &str, int len);
int begin = 0;      //记录回文串开始的位置
int main()
{
string str;
int length;
cout << "input a string: " << endl;
cin >> str;

length = longestPalindrome(str, str.length());
cout << "length: " << length << endl;
cout << "longest Palindrome is: ";
for(int i = 0; i < length; i++)
cout << str[begin + i];
cout << endl;

return 0;
}

int longestPalindrome(string &str, int len)
{
if(len < 1)
return 0;
int max = 0, i, j, length = 0;
for(i = 0; i < len; i++)
{
for(j = 0; (i - j >= 0)&&(i + j < len); j++)     //处理回文部分长度为奇数
{
if(str[i - j] != str[i + j])
break;
length = 2 * j + 1;
}
if(length > max)
{
begin = i - j + 1;
max = length;
}
for(j = 0; (i - j >= 0)&&(i + j + 1 < len); j++)     //处理回文部分长度为偶数
{
if(str[i - j] != str[i + j + 1])
break;
length = 2 * j + 2;
}
if(length > max)
{
begin = i - j + 1;
max = length;
}
}
return max;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  回文串