| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 57168 | Accepted: 23882 |
Description
Input
Output
Sample Input
abcfbc abfcab programming contest abcd mnp
Sample Output
4 2 0
Source
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
char sz1[1000];//存放第一个字符串
char sz2[1000];//存放第二个字符串
int maxlen[1000][1000];//存放公共子串的长度
//maxlen[i][j]表示s1的左边i个长度和s2
的左边j个长度的子串组成的最长公共子串的长度
int main()
{
while(cin>>sz1)//出入数据
{
cin>>sz2;
int len1=strlen(sz1);//测量长度
int len2=strlen(sz2);
int i,j;
for(i=0; i<len1; i++)
{
maxlen[i][0]=0;//边界条件
}
for(j=0; j<len2; j++)
{
maxlen[0][j]=0;
}
for(i=1; i<=len1; i++)
{
for(j=1; j<=len2; j++)
{
if(sz1[i-1]==sz2[j-1])//如果相等的话,从s[0]开始算
{
maxlen[i][j]=maxlen[i-1][j-1]+1;
}
else
{//自己实验下找到规律
maxlen[i][j]=max(maxlen[i-1][j],maxlen[i][j-1]);
}
}
}
cout<<maxlen[len1][len2]<<endl;
}
return 0;
}
该博客主要介绍了如何使用动态规划解决POJ-1458问题,即找到两个字符串的最长公共子序列。通过读取输入的两个字符串,计算它们的长度,并用二维数组maxlen记录每个位置上最长公共子串的长度。最后输出最长公共子序列的长度。代码中包含了详细的解释和边界条件处理。
391

被折叠的 条评论
为什么被折叠?



