题解 | #最长回文子串#

最长回文子串

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

中心扩展法。

typedef pair<int, int> PII;
#define x first
#define y second

class Solution {
public:
    PII expand(const string& A, int left, int right)
    {
        while (left >= 0 && right < A.length() && A[left] == A[right]) -- left, ++ right;
        return make_pair(left + 1, right - 1);
    }

    int getLongestPalindrome(string A, int n) {
        if (A.empty()) return 0;

        int max_length = 0, st = 0, ed = 0;
        for (int i = 0; i < A.length(); ++ i)
        {
            PII p1 = expand(A, i, i);
            PII p2 = expand(A, i, i + 1);

            if (p1.y - p1.x > ed - st) ed = p1.y, st = p1.x;
            if (p2.y - p2.x > ed - st) ed = p2.y, st = p2.x;
        }

        return ed - st + 1;
    }
};
全部评论

相关推荐

03-16 22:00
武汉大学 C++
幸福的小熊猫想要offer:我阿里投的 c++岗,面试官说自己是做 java 的,c++这辈子才有了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务