天天看點

Leetcode學習—— 5.最長回文子串5. 最長回文子串

5. 最長回文子串

給定一個字元串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。

示例 1:

輸入: “babad”

輸出: “bab”

注意: “aba” 也是一個有效答案。

示例 2:

輸入: “cbbd”

輸出: “bb”

提示:

  • 1 <= s.length <= 1000

  • s

    僅由數字和英文字母(大寫和/或小寫)組成
  • 我的解題
class Solution {
public:
    string longestPalindrome(string s) {
        int Maxlen, begin;
        int oddMax, odd_begin;
        int evenMax, even_begin;

        odd_fine(s, oddMax, odd_begin);
        even_find(s, evenMax, even_begin);
        if(s.length() == 1){
            return s.substr(0, 1);
        }

        if(oddMax > evenMax){
            Maxlen = oddMax;
            begin = odd_begin;
        }
        else{
            Maxlen = evenMax;
            begin = even_begin;
        }
        
        return s.substr(begin, Maxlen);
        
    }

    void odd_fine(string s, int &Maxlen, int &begin){
        
        int i, j, k;
        int slen, len;

        slen = s.length();
        Maxlen = 1;
        begin = 1;

        for(i = 1; (slen-i)*2+1 > Maxlen && i < slen - 1; i++){
            for(j = i+1, k=i-1; j < slen && k > -1; j++, k--){
                if(s[j] == s[k]){
                    len = j - k + 1;
                    if(len > Maxlen){
                        Maxlen = len;
                        begin = k;
                    }
                }
                else{
                    break;
                }
            }
        }
    }

    void even_find(string s, int &Maxlen, int &begin){
        int i, j, k;
        int slen, len;

        slen = s.length();
        Maxlen = 1;
        begin = 1;  

        for(i = 0; (slen-i-1)*2 > Maxlen && i < slen - 1; i++){
            for(j = i+1, k=i; j < slen && k > -1; j++, k--){
                if(s[j] == s[k]){
                    len = j - k +1;
                    if(len > Maxlen){
                        Maxlen = len;
                        begin = k;
                    }
                }
                else{
                    break;
                }
            }
        }
    }

};