c++-最长回文字符串

来源:互联网 发布:webpack java整合 编辑:程序博客网 时间:2024/05/28 11:30

题目描述

对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。

给定字符串A以及它的长度n,请返回最长回文子串的长度。

测试样例:
"abc1234321ab",12
返回:7


解题思路:分为两种进行统计:偶数回文字符串以及奇数回文字符串,对于偶数,不存在中间的元素,因此,i=center-1, 而对于奇数,存在中间的元素,因此i=center+1;


class Palindrome {public:    int findodd(string A, int center, int n){        int i= center-1;        int j = center+1;        while(i>=0 && j<=n-1){            if(A[i]!=A[j])                return j-1;            i--;            j++;        }        return j-1;    }    int findeven(string A, int center, int n){        int i= center;        int j = center+1;        while(i>=0 && j<=n-1){            if(A[i]!=A[j])                return j-1;            i--;            j++;        }        return j-1;    }            int getLongestPalindrome(string A, int n) {        // write code here        int max=0;        int i,j,center=0;        int end;                for(auto c : A){            end=findodd(A, center, n);            if(max<2*(end-center)+1)                max=2*(end-center)+1;            end=findeven(A, center, n);            if(max<2*(end-center))                max=2*(end-center);            center++;        }        return max;    }};