先把实现贴上,后面再填坑
1 class Solution { 2 public: 3 string longestPalindrome(string s) { 4 size_t len = s.size(); 5 string ins_s = string(2*len+1, '#'); 6 vector<int> len_vec(2*len +1, 0); 7 for (int i =0;i<len;i++) { 8 ins_s[1+2*i] = s[i]; 9 } 10 int max_dis = 0, max_dis_pos = 0; 11 int cur_dis = 0, cur_len = 0; 12 int max_len = 0,max_len_pos=0; 13 string result; 14 for (int i=0;i<2*len+1;i++) { 15 if (max_dis > i) { 16 cur_dis = i+len_vec[max_dis_pos-(i-max_dis_pos)]; 17 if (cur_dis<max_dis) { 18 len_vec[i] = len_vec[max_dis-(i-max_dis)]; 19 continue; 20 } 21 } 22 int start_len = max(0,max_dis-i)+1; 23 while (i-start_len >=0 && i+start_len < 2*len + 1 && ins_s[i-start_len]==ins_s[i+start_len]) { 24 max_dis = i+start_len; 25 max_dis_pos = i; 26 start_len++; 27 } 28 len_vec[i] = start_len-1; 29 if (len_vec[i] > max_len) { 30 max_len = len_vec[i]; 31 max_len_pos = i; 32 } 33 } 34 for (int i=max_len_pos-max_len;i<=max_len_pos+max_len;i++) { 35 if(ins_s[i] == '#') continue; 36 result += ins_s[i]; 37 } 38 return result; 39 } 40 };