c++-最长回文字符串

题目描述

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

给定字符串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;
    }
};


posted on 2017-12-18 15:59  sichenzhao  阅读(309)  评论(0编辑  收藏  举报

导航