题解 | #最长回文子串# 中心扩散法

最长回文子串

http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

中心扩散法,回文串肯定是要对称的。

首先往左寻找与当期位置相同的字符,直到遇到不相等为止。

然后往右寻找与当期位置相同的字符,直到遇到不相等为止。

最后左右双向扩散,直到左和右不相等。

class Solution {
public:

    int getLongestPalindrome(string A) {
        int n=A.size();
        if(n==0)
            return 0;
        if(n==1)
            return 1;
        int ans=1;
        int left=0, right=0;
        int maxlen=1;
        for(int i=0; i<n; i++)
        {
            left=i-1;
            right=i+1;
            while(left>=0 && A[i]==A[left])
            {
                maxlen++;
                left--;
            }
            while(right<n && A[i]==A[right])
            {
                maxlen++;
                right++;
            }
            while(left>=0 && right<n && A[right]==A[left])
            {
                maxlen+=2;
                left--;
                right++;
            }
            ans=max(maxlen, ans);
            maxlen=1;
        }
        return ans;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务