最长回文子串

对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
给定字符串A以及它的长度n,请返回最长回文子串的长度。
测试样例:
"abc1234321ab",12
返回:7

思路:Manacher 算法
https://www.cxyxiaowu.com/2869.html
算法的核心还是将原始字符串长度确保为奇数长度,一方面这样毕竟好选则中心进行扩散,另一方面,可以得到任一位置的回文长度


class Palindrome {
public:
    int getLongestPalindrome(string A, int n) {
        vector<char> new_arr;
        
        new_arr.push_back('#');
        for(int i=0;i<A.length();i++){
            new_arr.push_back(A[i]);
            new_arr.push_back('#');
        }
        new_arr.push_back('#');

        int max_len = 0;
        for(int i=0;i<new_arr.size();i++){
            int center_loc = i;
            int left_loc = center_loc-1;
            int right_loc = center_loc + 1;
            int curr_len = 0;
            while(left_loc>=0 && right_loc<new_arr.size()){
                if(new_arr[left_loc]==new_arr[right_loc]){
                    curr_len++;
                    left_loc--;
                    right_loc++;
                }else{
                    break;
                }
            }

            max_len = max(max_len,curr_len);
        }

        return max_len;
    }
};
posted @ 2020-09-12 11:16  real-zhouyc  阅读(140)  评论(0编辑  收藏  举报