#H. 【例9.9】最长公共子序列

    Type: Default 1000ms 256MiB

【例9.9】最长公共子序列

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

【题目描述】

一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X=<x1,x2,,xm>X=<x_1,x_2,\dots,x_m>,则另一序列Z<z1,z2,,zk>Z=<z_1,z_2,\dots,z_k>是X的子序列是指存在一个严格递增的下标序列<i1,i2,,ik><i_1,i_2,\dots,i_k>,使得对于所有 j=1,2,…,k 有:

Xij=ZjX_{ij}=Z_j

例如,序列 Z=bcdb 是序列 X=abcbdab 的子序列,相应的递增下标序列为 <2,3,5,7>。给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。例如,若 X=abcbdab 和 Y=bdcaba,则序列 bca 是 X 和 Y 的一个公共子序列,序列bcba也是X和Y的一个公共子序列。而且,后者是X和Y的一个最长公共子序列.因为X和Y没有长度大于4的公共子序列。

给定两个序列X{xi}X=\{x_i\}Y={yi}Y=\{y_i\}.要求找出X和Y的一个最长公共子序列。

【输入】

共有两行。每行为一个由大写字母构成的长度不超过1000的字符串,表示序列X和Y。

【输出】

第一行为一个非负整数。表示所求得的最长公共子序列的长度。若不存在公共子序列.则输出文件仅有一行输出一个整数0。

【输入样例】

ABCBDAB
BDCABA

【输出样例】

4

【提示】

最长公共子串(Longest Common Substirng)和最长公共子序列(Longest Common Subsequence,LCS)的区别为:子串是串的一个连续的部分,子序列则是从不改变序列的顺序,而从序列中去掉任意的元素而获得新的序列;也就是说,子串中字符的位置必须是连续的,子序列则可以不必连续。字符串长度小于等于1000。

【来源】

一本通在线评测

C23暑假作业6-线性DP-基础题

Not Claimed
Status
Done
Problem
11
Open Since
2024-7-5 0:00
Deadline
2024-10-27 23:59
Extension
24 hour(s)