天天看點

LeetCode_5_Longest Palindromic Substring_最長回文子串

題目描述:給定一個字元串s,找到s中最長的回文子串,你可以假設s的最大長度是1000.

輸入示例1;
Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.      
輸入示例2:
Input: "cbbd"
Output: "bb"      
class Solution {
public:
    string longestPalindrome(string s) {
        int len=s.size();
        if(len==0||len==1)
            return s;
        int start=0;
        int end=0;
        int len_max=0;
        for(int i=0;i<len;i++){
            int len1=expand1(s,i,i);
            int len2=expand1(s,i,i+1);
            len_max=max(max(len1,len2),len_max);//需要判斷三個資料的大小關系
            if(len_max>end-start+1){
                start=i-(len_max-1)/2;
                end=i+len_max/2;
            }
        }
        return s.substr(start,len_max);
    }
private:
    int expand1(string s,int left,int right){
        int L=left,R=right;
        while(L>=0&&R<s.length()&&s[L]==s[R]){
            L--;
            R++;
        }
        return R-L-1;//注意前面的while循環最後L--和R++了,是以L指向字元串第一個元素的前一個位置,R指向了字元串最後一個元素的後一個位置
    }
};