每天一道算法题(第5题):解决两个字符串的最长公共子序列与最长公共子串问题
发布时间
阅读量:
阅读量
题目:当字符串一中的所有字符按照其在原字符串中的排列顺序出现在另一个字符串二中时,字符串一可被定义为字符串二的子串。需要说明的是,子串(即字符串一)的字符在字符串二中并不需要是连续排列的。请设计并实现一个函数,该函数接收两个字符串作为输入参数,计算并输出它们的最长公共子串,并将该子串打印出来。
例如:若输入两个字符串BDCABA 和ABCBDAB,则BCBA 和BDAB 均为它们的最长公共子串之一,此时应输出长度值4,并打印出其中一个符合条件的子串。
1.核心思路阐述
最长子序列的定义并不依赖于元素的连续性。针对两个序列str1和str2,假设其长度分别为m和n。构造一个辅助矩阵c[m][n],其中c[i][j]表示子串str1[0-i]与子串str2[0-j]之间的最长公共子序列的长度,该矩阵中的各个元素遵循以下关系:

假设需要确定两个字符串 Xm ={x0, x1,…,xm-1} 与 Yn={y0 ,y1,…,yn-1} 的最长公共子序列(LCS),若 xm-1 与 yn-1 相等,则只需计算 Xm-1 与 Yn-1 的 LCS,再将 xm-1(或 yn-1)添
全部评论 (0)
还没有任何评论哟~
