算法复习——动态规划篇之最长公共子串问题

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

算法复习——动态规划篇之最长公共子串问题

以下内容主要参考中国大学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| maxZ

    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<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值