LeetCode 5 最长回文子串

LeetCode 5 最长回文子串

🟠 中等偏上 https://leetcode.cn/problems/longest-palindromic-substring/description/

思路

枚举中心点,向两边扩展。

class Solution {

public:

    string longestPalindrome(string s) {

        int n = s.size();

        int start = 0,end = 0;

        for(int i = 0;i<n;i++){

            int len1 = help(s,i,i);

            int len2 = help(s,i,i+1);

            int len = max(len1,len2);

            if(len>end-start+1){

                if(len%2==1){

                    start = i-1-(len-1)/2+1;

                    end = i+1+(len-1)/2-1;

                }else{

                    start = i-(len)/2+1;

                    end = i+1+(len)/2-1;

                }

            }

        }

        return s.substr(start,end-start+1);

    }

    int help(string& s,int left, int right){

        while(left>=0&&right<s.size()&&s[left]==s[right]){

            left--;

            right++;

        }

        // cout<<right-left+1<<endl;

        return right - left-1;

    }

};
class Solution {

public:

    int get_length(string &s,int left,int right){

        int len = 0;

        while(left>=0&&right<s.size()){

            if(s[left]==s[right]){

                left--;

                right++;

                len++;

            }else{

                break;

            }

        }

        return len;

    }

    string longestPalindrome(string s) {

        int n = s.size();

        if(n==1) return s;

        int i = 0;

        int res_index = 0,res_length = 0;

        while(i<n){

            int len1 = 2*get_length(s,i,i+1);//偶

            int len2 = 1+2*get_length(s,i,i+2); //奇数

  

            if(len1>len2&&len1>res_length){

                res_index = i-len1/2+1;

                res_length = len1;

            }

  

            if(len2>len1&&len2>res_length){

                res_index = i-(len2-1)/2+1;

                res_length = len2;

            }

  
  

            i++;

        }

        // cout<<res_index<<endl;

        return  s.substr(res_index,res_length);

    }

};