Longest Common Subsequence
Given two sequences of characters, print the length of the longest common subsequence of both sequences. For example, the longest common subsequence of the following two sequences:
abcdgh aedfhris adh of length 3.
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
For each subsequent pair of input lines, output a line containing one integer number which satisfies the criteria stated above.
Sample input
a1b2c3d4e zz1yy2xx3ww4vv abcdgh aedfhr abcdefghijklmnopqrstuvwxyz a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0 abcdefghijklmnzyxwvutsrqpo opqrstuvwxyzabcdefghijklmn
Output for the sample input
4 3 26 14
题意:给出两字符串(可能含有空格),求出两字符串最长的公共子串。
题解:DP,原理很清楚,写出递归式,注意输入可能含有空格。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#define MAX_N 1005
using namespace std;
int n,m;
char s[MAX_N],t[MAX_N];
int dp[MAX_N][MAX_N];
int main()
{
while( gets(s) && gets(t) )
{
n = strlen(s);
m = strlen(t);
for( int i = 0; i < n; i++ )
{
for( int j = 0; j < m; j++ )
{
if( s[i] == t[j] )
dp[i+1][j+1] = dp[i][j] + 1;
else
dp[i+1][j+1] = max(dp[i][j+1],dp[i+1][j]);
}
}
cout<<dp[n][m]<<endl;
}
return 0;
}