zoukankan      html  css  js  c++  java
  • leetcode 516. 最长回文子序列

    题目描述:

    给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。

    示例 1:
    输入:

    "bbbab"
    输出:

    4
    一个可能的最长回文子序列为 "bbbb"。

    示例 2:
    输入:

    "cbbd"
    输出:

    2
    一个可能的最长回文子序列为 "bb"。

    解题思路:

    利用动态规划求解,dp[i][j]表示从i到j的连续字符串中的回文序列长度。利用双重循环,判断s[i]==s[j],若相等,dp[i][j] = dp[i+1][j-1]+2。否则,dp[i][j] = max(dp[i+1][j], dp[i][j-1])。

    代码:

     1 class Solution {
     2 public:
     3     int longestPalindromeSubseq(string s) {
     4         int n = s.length();
     5         if(n==0)
     6             return 0;
     7         vector<vector<int>> dp(n, vector<int>(n, 0));
     8         for(int i=0; i<n; i++)
     9             dp[i][i]=1;
    10         for(int j=1; j<n; j++)
    11         {
    12             for(int i=j-1; i>=0; i--)
    13             {
    14                 if(i==j)
    15                     continue;
    16                 if(s[i]==s[j])
    17                     dp[i][j] = dp[i+1][j-1]+2;
    18                 else
    19                     dp[i][j] = max(dp[i+1][j], dp[i][j-1]);
    20             }
    21         }
    22         return dp[0][n-1];
    23     }
    24 };
  • 相关阅读:
    sql
    Java 反射
    Java 泛型
    Java 数组小记
    Java 实现二叉树
    Maven的环境配置
    用于解决easui 保存时候,前台传参是空字符串不null
    SpringMVC
    SpringMVC
    解决MySql varchar类型的数字排序
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/11586737.html
Copyright © 2011-2022 走看看