[leetcode] Longest Palindromic Substring 最长回文子串

先把实现贴上,后面再填坑

 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 };

猜你喜欢

转载自www.cnblogs.com/lidouer/p/9148771.html