UVA10405 Longest Common SubsequenceLCS+DP

Posted tigerisland45

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA10405 Longest Common SubsequenceLCS+DP相关的知识,希望对你有一定的参考价值。

Given two sequences of characters, print the length of the longest common subsequence of both sequences.
????Sequence 1:
技术分享图片

????Sequence 2:
技术分享图片

????For example, the longest common subsequence of the following two sequences ‘abcdgh’ ans ‘aedfhr’ is ‘adh’ of length 3.

Input
Input consists of pairs of lines. The first line of a pair contains the first string and the second line contains the second string. Each string is on a separate line and consists of at most 1,000 characters

Output
For each subsequent pair of input lines, output a line containing one integer number which satisfies the criteria stated above.

Sample Input
bcacbcabbaccbab
bccabccbbabacbc
a1b2c3d4e
zz1yy2xx3ww4vv
abcdgh
aedfhr
abcdefghijklmnopqrstuvwxyz
a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0
abcdefghijklmnzyxwvutsrqpo
opqrstuvwxyzabcdefghijklmn

Sample Output
11
4
3
26
14

问题链接UVA10405 Longest Common Subsequence
问题描述:(略)
问题分析
????动态规划问题,是一个标准模板题,套模板就可以了。
????需要注意字符串长度!
程序说明
????需要注意,要用行读入函数gets()读入数据,不能使用格式化输入"%s%s",不然会WA。
参考链接:(略)
题记:(略)

AC的C语言程序如下:

/* UVA10405 Longest Common Subsequence */

#include <stdio.h>
#include <string.h>

#define MAX(x,y) (((x) > (y)) ? (x) : (y))

#define N 1000
char a[N + 2], b[N + 2];
int dp[N + 1][N + 1];

int lcs(char *p, char *q)
{
    memset(dp, 0, sizeof(dp));

    int len1 = strlen(p + 1);
    int len2 = strlen(q + 1);
    int i, j;
    for(i = 1; i <= len1; i++)
        for(j = 1; j <= len2; j++) {
            if(p[i] == q[j])
                dp[i][j] = dp[i - 1][j - 1] + 1;
            else
                dp[i][j] = MAX(dp[i - 1][j], dp[i][j - 1]);
        }

    return dp[len1][len2];
}

int main(void)
{
    while(gets(a + 1), gets(b + 1))
        printf("%d
", lcs(a, b));

    return 0;
}

以上是关于UVA10405 Longest Common SubsequenceLCS+DP的主要内容,如果未能解决你的问题,请参考以下文章

uva10405-最长公共子序列

SPOJ 1812 Longest Common Substring II

Longest Common Substring(最长公共子序列)

Leetcode 之Longest Common Prefix(34)

●SPOJ 1811 Longest Common Substring

LeetCode 14. Longest Common Prefix