回文子串(中心扩展)

最长回文子串
思路:中心扩展法

class Solution {
public:
    pair<int,int> centralPoint(string&s,int left,int right)
    {
        while(left>=0&&right<s.size()&&s[left]==s[right]){
            left--;
            right++;
        }
        return {left+1,right-1};
    }
    string longestPalindrome(string s) {
        pair<int,int> StartAndEnd{0,0};
        string res;
        for(int i=0;i<s.size();i++)
        {
            pair<int,int> tmp1=centralPoint(s,i,i);
            pair<int,int> tmp2=centralPoint(s,i,i+1);
            if(StartAndEnd.second-StartAndEnd.first<tmp1.second-tmp1.first)
                StartAndEnd=tmp1;
            if(StartAndEnd.second-StartAndEnd.first<tmp2.second-tmp2.first)
                StartAndEnd=tmp2;
        }
        for(int i=StartAndEnd.first;i<=StartAndEnd.second;++i)
            res.push_back(s[i]);
        return res;
    }
};

回文子串

class Solution {
    int counter=0;
public:
    void centralPoint(string&s,int left,int right)
    {
        while(left>=0&&right<s.size()&&s[left]==s[right]){
            left--;
            right++;
            counter++;
        }
    }
    int countSubstrings(string s) {
        for(int i=0;i<s.size();i++)
        {
            centralPoint(s,i,i);
            centralPoint(s,i,i+1);
        }
        return counter;
    }
};

时间复杂度:O(n^2)
空间复杂度:O(n)

posted @ 2020-08-19 10:06  周颖  阅读(20)  评论(0)    收藏  举报