最长回文子串(C/C++)

来源:互联网 发布:手机淘宝如何修改好评 编辑:程序博客网 时间:2024/05/29 15:10

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

思路:从给定字符串的头部开始,在每个字符的位置处设置两个指针,分别向前和向后两个方向依次判断各字符是否相等,当两个指针指向的字符不相等时计算回文子串的长度。重复这样的过程,直至扫描到字符串的最后一个字符为止。

内层的两个 for 循环,它们分别对于以 i 为中心的,长度为奇数和偶数的两种情况,整个代码遍历中心位置 i 并以之扩展,找出最长的回文。

注意:回文子串长度的计算方法

代码如下:

//最长回文子串#include <iostream>using namespace std;//*s为字符串,n为字符串的长度int LagPalindrome(char *str, int n){int count = 0;int max = 0;//最长回文子串的长度if (str == NULL || n<1){return 0;}for (int i = 0; i < n; i++){//子串为奇数时for (int j = 0; (i-j)>=0&&(i+j)<n; j++){if (str[i - j] != str[i + j]){break;}count = 2 * j + 1;}if (count > max){max = count;}//子串为偶数时for (int k = 0; (i - k)>=0 && (i + k + 1) < n; k++){if (str[i - k] != str[i + k+1]){break;}count=2*k + 2;}if (count > max){max =count ;}}return max;}int main( ){char str[] = "abccba";int n = strlen(str);int MaxLen;MaxLen = LagPalindrome(str, n);cout << "最长回文子串的长度是:"<<MaxLen<<endl;return 0;}


1 0
原创粉丝点击