博客
关于我
Leetcode 516. 最长回文子序列
阅读量:258 次
发布时间:2019-03-01

本文共 1279 字,大约阅读时间需要 4 分钟。

为了找到给定字符串 s 中的最长回文子序列,我们可以使用动态规划的方法。该方法通过建立一个二维数组 dp,其中 dp[i][j] 表示从索引 i 到 j 的最长回文子序列的长度。

方法思路

  • 初始化:创建一个大小为 n x n 的二维数组 dp,其中 n 是字符串的长度。所有元素初始化为 0。
  • 填充 dp 数组:遍历每个可能的子区间 [i, j]:
    • 如果 s[i] 等于 s[j],则 dp[i][j] 等于 2 + dp[i+1][j-1]。
    • 否则,dp[i][j] 等于 dp[i+1][j] 和 dp[i][j-1] 中的最大值。
  • 结果:dp[0][n-1] 即为最长回文子序列的长度。
  • 解决代码

    public class Solution {    public int longestPalindromeSubseq(String s) {        int n = s.length();        if (n == 0) return 0;                // Initialize dp table        int[][] dp = new int[n][n];        for (int i = 0; i < n; i++) {            dp[i][i] = 1;        }                for (int i = 0; i < n; i++) {            for (int j = i + 1; j < n; j++) {                if (s.charAt(i) == s.charAt(j)) {                    if (i + 1 == j - 1) {                        dp[i][j] = 2;                    } else {                        dp[i][j] = 2 + dp[i + 1][j - 1];                    }                } else {                    dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]);                }            }        }                return dp[0][n - 1];    }}

    代码解释

  • 初始化:dp 数组的对角线元素 dp[i][i] 初始化为 1,表示单个字符本身是一个长度为1的回文。
  • 填充 dp 数组:
    • 当 s[i] 等于 s[j] 时,回文的长度为 2 加上子区间 [i+1, j-1] 内的最长回文长度。
    • 否则,回文的长度取子区间 [i+1, j] 和 [i, j-1] 内的最大回文长度。
  • 结果:最长回文子序列的长度存储在 dp[0][n-1],即整个字符串的最长回文子序列长度。
  • 转载地址:http://giev.baihongyu.com/

    你可能感兴趣的文章
    Python函数合集:足足68个内置函数请收好!
    查看>>
    Python+Selenium自动化测试项目实战
    查看>>
    Python+Selenium自动化测试项目实战【建议收藏】
    查看>>
    Python+Selenium自动化测试:Page Object模式
    查看>>
    python+selenium进行cnblog的自动化登录测试
    查看>>
    Python函数只返回第一个值而不是数据框
    查看>>
    Python+SQL实战:京东用户行为数据分析案例解析(上)
    查看>>
    Python+SQL实战:京东用户行为数据分析案例解析(下)
    查看>>
    PYTHON+Twisted+sqlanydb=ABORT()
    查看>>
    Python函数之返回值、作用域和局部变量
    查看>>
    Python+统计学 | 探索常用的数据分析统计分布
    查看>>
    python, selenium中用于切换帧的函数
    查看>>
    python函数
    查看>>
    python----线程、进程、协程的区别及多线程详解
    查看>>
    python---5
    查看>>
    python---使用celery分布式系统异步发送短信(云通讯)来验证登录
    查看>>
    python--003--百分号字符串拼接、format
    查看>>
    Python--10、线程
    查看>>
    Python--Redis实战:第四章:数据安全与性能保障:第4节:复制
    查看>>
    python--基本代码规范
    查看>>