zoukankan      html  css  js  c++  java
  • LeetCode 5 Longest Palindromic Substring

    求最大回文串

    1最初想用最长公共子序列,但是有问题,怎么改??

    2 动态规划

    根据回文串的性质,如果s[i+1]-s[j-1]为回文串,并且s[i]==s[j],那么我们可以得到s[i]-s[j]为回文串。但是这里要注意初始化问题:单个字母一定是回文串。并且由于s[i+1]-s[j-1]的间隔为2,所以两个连续的字母必须单独来考虑。同时,dp[i][j]的状态是由dp[i+1][j-1]推出,所以i要从后往前

    class Solution {
    public:
        string longestPalindrome(string s) {
        
        int len=s.length();
        vector<vector<int>> dp(len, vector<int>(len, 0));
        int start=0,maxn=1;
        for(int i=0;i<len;i++)
        {
            dp[i][i]=1;
            if(i+1<len&&s[i]==s[i+1])
            {
                dp[i][i+1]=1;
                start=i;
                maxn=2;
            }
        }
        for(int i=len-2;i>=0;i--)
        {
            for(int j=i+2;j<len;j++)
            {
                if(s[i]==s[j]&&dp[i+1][j-1]==1)
                {
                    dp[i][j]=1;
                    if(j-i+1>maxn)
                    {
                        start=i;
                        maxn=j-i+1;
                    }
                    
                }
            }
        }
        return s.substr(start,maxn);
        }
    };

    3 马拉车

  • 相关阅读:
    Linux学习之路3-HelloWorld
    Linux学习之路2-linux系统烧写
    Linux学习之路1
    linux常用命令总结
    禅道配置发邮件功能
    SHELVE模块
    PICKLE模块
    JSON_dump和load
    json.dumps和loads方法
    模块调用
  • 原文地址:https://www.cnblogs.com/flightless/p/8747549.html
Copyright © 2011-2022 走看看