美文网首页
证明LPS为字符串与其反转后形成字符串的LCS

证明LPS为字符串与其反转后形成字符串的LCS

作者: 江海小流 | 来源:发表于2019-11-19 06:58 被阅读0次

LPS: Longest Palindrome Subsequence 最长回文子序列
LCS: Longest Common Subsequence 最长公共子序列

对于一个字符串 abba,它的最长回文子序列就是它本身,它与它的反转abba 的最长公共子序列也是 abba。那么,一个字符串的最长回文子序列是否为该字符串与它的反转的最长公共子序列?

1 LCS的求解方法

一般使用动态规划的方法求解 LCS问题。具体来说,对于字符串 s_1s_2, 定义 dp[i][j] 表示 s_1[:i]s_2[:j] 的最长公共子序列的长度。其中,s[:i] 表示字符串 s 的长度为 i 的前缀。

对于 dp[i][j],有如下转移:

  • dp[i][j] = dp[i-1][j-1] + 1,如果满足 s_1[i-1] = s_2[j-1]
  • dp[i][j] = max(dp[i-1][j], dp[i][j-1]),如果不满足 s_1[i-1] = s_2[j-1]

例如,对于字符串 abaacba,其DP[\cdot][\cdot]内容如下:

  • 红点代表两个字符串对应位置相等,且对应一个字符
  • 蓝色线条表示转移方式
  • 线条经过的红色点的个数,就是DP[\cdot][\cdot]的值
  • 将线条经过所有红点对应的字符连起来,就是LCS
图1: 字符串abaacba的DP内容示例

2 LPS与LCS

假设字符串 s_2 为 字符串 s_1 的反转,假设字符串 s_1 的长度为 n,那么

  • s_1[i] = s_2[n-i-1]
  • 如果有 s_1[i] = s_1[j], i \ne n-i-1,有
    • s_1[i] = s_2[j] = s_2[n-i-1] = s_2[n-j-1]

该性质对应到 LCS问题中的DP图时,可以看到

  • 红点是按照反对角线呈对称分布的
  • 对称的红点代表的字符是一样的

如果从反对角线上的某一点(存在蓝色线条通过)出发,分别生成两条路径:

  • 第一条路径通往左上角
  • 第二条路径通往右下角

两条路径合起来,就是一个 DP 具体的转移方式,是一个 Common Subsequence。而对于某一个点生成的两条路径,假设该路径会经过最多的红点,因为红点是对称的,

  • 所以两条路径也是对称的

枚举这样所有的点,求出来的最长的 Common Subsequence,就是两个字符串的 LCS。同时,这条路径是按照反对角线对称的。因此,生成的LCS就是LPS。

相关文章

  • 证明LPS为字符串与其反转后形成字符串的LCS

    LPS: Longest Palindrome Subsequence 最长回文子序列LCS: Longest C...

  • 回文数

    思路1:1.小于0 --->非回文数2.字符串反转后,首位为0,且长度不为1 --->非回文数3.反转后字符串 =...

  • JavaScript字符串反转截取

    实现思路: 1.反转目标字符串;2.截取反转后的字符串;3.在反转一次恢复原来的字符串顺序 方法调用

  • 【华为机试】字符串反转

    题目描述: 输入一个字符串,然后输出该字符串反转后的字符串 输入描述: 输入N个字符 输出描述: 输出该字符串反转...

  • 字符串

    数组与字符串转换Swift 字符串转数组: Swift 数组转字符串: 1.反转字符串 2.判断字符串是否为空 3...

  • 前端常见算法题(字符串篇)

    一、反转字符串 2020.09.01 No.344 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入...

  • JS_字符串反转

    字符串反转先将字符串转成数组,然后再将数组反转,最后将数组转成字符串输出

  • leecode刷题(11)-- 反转字符串

    leecode刷题(11)-- 反转字符串 反转字符串 描述: 编写一个函数,其作用是将输入的字符串反转过来。 示...

  • 数据结构之反转字符串

    反转字符串 题目描述:将字符串"##We###Are###Family!###"反转为"###!ylimaF###...

  • 字符串/数组反转

    题目:翻转字符串“algorithm”在php中有反转的自带函数,分别为:字符串反转:strrev() 数组反转:...

网友评论

      本文标题:证明LPS为字符串与其反转后形成字符串的LCS

      本文链接:https://www.haomeiwen.com/subject/bdwiictx.html