算法复习——动态规划篇之最长公共子串问题
以下内容主要参考中国大学MOOC《算法设计与分析》,墙裂推荐希望入门算法的童鞋学习!
1. 问题背景
子串:给定序列中零个或多个连续的元素(如字符)组成的子序列
公共子串:
-
给定两个序列 X X X和 Y Y Y

-
公共子串示例

问题是如何求两个给定序列的最长公共子串?
2. 问题定义
最长公共子串问题(Longest Common Substring Problem)
输入:
- 序列 X = < x 1 , x 2 , … , x n > X=<x_1, x_2, \dots, x_n> X=<x1,x2,…,xn>和序列 Y = < y 1 , y 2 , … , y m > Y=<y_1, y_2, \dots, y_m> Y=<y1,y2,…,ym>
输出:
-
求解一个公共子串 Z = < z 1 , z 2 , … , z l > Z=<z_{1}, z_{2}, \dots, z_{l}> Z=<z1,z2,…,zl>,令 m a x ∣ Z ∣ max|Z| max∣Z∣,
s . t . Z = < x i , x i + 1 , … , x i + l − 1 > = < y j , y j + 1 , … , y j + l − 1 > s.t. Z=<x_i, x_{i+1}, \dots, x_{i+l-1}>=<y_j, y_{j+1}, \dots, y_{j+l-1}> s.t.Z=<xi<

本文介绍如何使用动态规划解决最长公共子串问题,通过构建二维数组记录子串长度,并逐步迭代更新最大值,最终输出最长公共子串。
最低0.47元/天 解锁文章
1115

被折叠的 条评论
为什么被折叠?



