LeetCode 题解 | 5. 最长回文子串(中心扩展法 C++)

题目描述(中等难度)

原题链接
在这里插入图片描述

算法

(中心扩展法) O ( n 2 ) O(n^2)

  • 因为回文子串是对称的,所以可以遍历每个点,然后以每个点为中心往两侧扩展,记录能形成的最长回文子串,同时注意分奇偶两种情况

时间复杂度是 O ( n 2 ) O(n^2) ,空间复杂度是 O ( 1 ) O(1)

C++代码

class Solution {
public:
    string longestPalindrome(string s) {
        int n = s.size(), rmax = 0;
        string res;

        // 中心扩展法(对称)
        for(int k = 0; k < n; k ++) {
            int i = k - 1, j = k + 1;
            while(i >= 0 && j < n && s[i] == s[j]) i --, j ++;
            int len = j - i - 1;
            if (len > rmax) {
                rmax = len;
                res = s.substr(i + 1, len);
            }
        }

        for (int k = 0; k < n - 1; k ++) {
            int i = k, j = k + 1;
            while(i >= 0 && j < n && s[i] == s[j]) i --, j ++;
            int len = j - i - 1;
            if (len > rmax) {
                rmax = len;
                res = s.substr(i + 1, len);
            }
        }
        return res;
    }
};

写在最后:我的博客主要是对计算机领域所学知识的总结、回顾和思考,把每篇博客写得通俗易懂是我的目标,分享技术和知识是一种快乐 ,非常欢迎大家和我一起交流学习,有任何问题都可以在评论区留言,也期待与您的深入交流(^∀^●)



发布了239 篇原创文章 · 获赞 80 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_43827595/article/details/104295446
今日推荐