最长回文子串
对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
给定字符串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;
}
};