zoukankan      html  css  js  c++  java
  • 算法题-最长回文子串-动态规划

    动态规划方法---解题思路

    1. 定义dp[i][j] 容器,其中i, j表示为字符串中i到j的子串,是否为回文

    2. dp初始化

         2.1 dp[i][i] = true;

         2.2 if s[i] == s[i+1] 则 dp[i][i+1] = true;

    3. 状态转移方程:如果dp[i+1][j-1] == true && s[i] == s[j] 则 dp[i][j] == true;

    下图为具体dp实现过程

    代码如下

    class Solution {
    public:
        string longestPalindrome(string s) {
            int len=s.size();
            if(len==0||len==1)
                return s;
            int start=0;//回文串起始位置
            int max=1;//回文串最大长度
            vector<vector<int>>  dp(len,vector<int>(len));//定义二维动态数组
            for(int i=0;i<len;i++)//初始化状态
            {
                dp[i][i]=1;
                if(i<len-1&&s[i]==s[i+1])
                {
                    dp[i][i+1]=1;
                    max=2;
                    start=i;
                }
            }
            for(int l=3;l<=len;l++)//l表示检索的子串长度,等于3表示先检索长度为3的子串
            {
                for(int i=0;i+l-1<len;i++)
                {
                    int j=l+i-1;//终止字符位置
                    if(s[i]==s[j]&&dp[i+1][j-1]==1)//状态转移
                    {
                        dp[i][j]=1;
                        start=i;
                        max=l;
                    }
                }
            }
            return s.substr(start,max);//获取最长回文子串
        }
    };
  • 相关阅读:
    Select查询执行顺序
    javascript异步处理
    ASP.NET MVC WebAPI请求
    函数声明和函数表达式
    var声明的成员变量和函数内声明的变量区别
    网页大小自适应方案
    MVC Html.AntiForgeryToken() 防止CSRF攻击
    Jquery跨域请求
    螺旋模型
    快速原型模型
  • 原文地址:https://www.cnblogs.com/syw-home/p/13598311.html
Copyright © 2011-2022 走看看