Description
给定两个字符串,请输出这两个字符串的最大公共子序列
输入格式
两行,一行一个字符串(不包括空格,Tab键),长度不超过1000
输出格式
输出最大公共子序列的长度
输入样例
abbca
aba
输出样例
3
#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
int main()
{
int m,n,i,j;
char str1[1001],str2[1001];
static int dp[1001][1001]; //大数组
/*
char str1[1001],str2[1001];
int dp[1001][1001];
运行错误!提示:Process returned -1073741571 (0xC00000FD)
问题所在:栈的默认内存空间为1M左右,所以会导致内存溢出。数组定义太大。
解决方法:声明成全局或static的,这两种变量不压栈。
*/
scanf("%s",str1);
scanf("%s",str2);
m=strlen(str1);
n=strlen(str2);
for(i=1; i<=m; i++)
{
for(j=1; j<=n; j++)
{
if(str1[i-1]==str2[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
}
else
{
dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
}
}
}
cout<<dp[i-1][j-1]<<endl;
return 0;
}