栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode--5. 最长回文子串(C++描述)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode--5. 最长回文子串(C++描述)

// Source : https://leetcode.cn/problems/longest-palindromic-substring/
// Date : 2022-5-28

class Solution {
public:
    string longestPalindrome(string s) {
        int n = s.size();
        // 如果字符个数小于2的话,就返回当前字符串
        if(n < 2)
            return s;
        int maxlen = 1;
        int begin = 0;

        // 二维数组表示动态规划的表格(DP就是填表)
        // C++ vector初始化需要写上几行几列(n行n列)
        vector> dp(n, vector (n));
        // 初始化对角线元素为true
        for(int i = 0;i < n;++i)
            dp[i][i] = true;
        // 开始填表工作
        for(int L = 2;L <= n;++L)
        {
            for(int i = 0;i < n;++i)
            {
                // 由 L 和 i 可以确定右边界,即 j - i + 1 = L 得
                int j = L - 1 + i;
                // 如果右边界越界,就可以退出当前循环
                if(j >= n)
                    break;
                // 如果首尾字符不相等就置当前位置元素为false
                if(s[i] != s[j])
                    dp[i][j] = false;
                else
                {
                    // j - 1 - (i + 1) + 1 < 2
                    if(j - i < 3)
                        dp[i][j] = true;
                    else
                    {
                        // 如果首尾字符均相等,则需要看向里一位的两个字符是否相等
                        dp[i][j] = dp[i + 1][j - 1];
                    }
                }
                if(dp[i][j] && j - i + 1 > maxlen)
                {
                    maxlen = j - i + 1;
                    begin = i;
                }
            }
        }
        return s.substr(begin, maxlen);
    }
}; 

        
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935404.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号