Leetcode-5.最长回文串 && C++

捡起算法,全靠大脑,完全没搜,这波给到一个人上人

复杂度 :n*n

核心思路 :遍历指针,并且以这个指针为中心,分别向两侧延伸来找回文串

注意:考虑回文串是奇数和偶数的情况(思路一样,就是遍历的指针个数不一样,奇数走一个,偶数走俩)

没看题解,写的思路简洁版代码,未优化(不过时间复杂度够了)

cpp 复制代码
class Solution {
public:
    string longestPalindrome(string s) {
        string res="";
        int m_len = 1;
        for(int i=0;i<s.size();i++){ //回文串奇数,一个指针
            int l = i-1;
            int r = i+1;
            int len = 1;
            while(l>=0 && r<s.size()){
                if(s[l]==s[r]){
                    len+=2;
                    l--;
                    r++;
                } 
                else  break;
            }
            if(len>m_len){
                m_len = len;
                res = s.substr(l+1,r-1-l); //l+1 ~ r-1之间
            }
        }

        for(int i=0,j=1;i<s.size()-1,j<s.size();i++,j++){ //回文串是偶数,俩指针
            if(s[i]==s[j]){
                int l = i-1;
                int r = j+1;
                int len = 2;
                while(l>=0 && r<s.size()){
                    if(s[l]==s[r]){
                        len+=2;
                        l--;
                        r++;
                    } 
                    else  break;
                }
                if(len>m_len){
                    m_len = len;
                    res = s.substr(l+1,r-1-l);
                }
            }
        }

        if(m_len==1){
            res=res+s[0];
        }
        return res;
    }

};