天天看點

【C++】【LeetCode】5. Longest Palindromic Substring

連結:Longest Palindromic Substring

思路:從字元串左邊開始周遊,每個i假設為回文的最中心,略過重複字元,然後向左右兩邊比較字元是否相同,           直到碰到不相同的,記錄長度,如果長度大于最大回文長度,替換,否則放棄。

代碼: class Solution {

public:

    string longestPalindrome(string s) {

         if (s.size() <= 1){

            return s;

        }

        int begin = 0;

        int maxLen = 1;

        for (int i=0; i<s.size() && (s.size()-i)*2>= maxLen;){

            int left=i, right = i;

            //跳過重複的元素

            while (right < s.size()-1 && s[right] == s[right+1]){ right ++; }

            i = right+1; //右邊非重複的第一個

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

                left --;

                right ++;

            }

            if (maxLen<(right-left+1)){

                maxLen = right-left+1;

                begin = left;

            }

        }

        return s.substr(begin, maxLen);

    }

};