典型的动态规划问题
这道题目的大概意思就是给你两个字符串,比较一下两个字符串里有多少个字符是相同的
这道题目我用的方法是构造一个矩阵,行是s1,列是s2 ,当两个字符的前一个字符相等的时候就maxlen[i][j]=maxlen[i-1][j-1]+1.即对角线上的上面一个的值加1,否则就比较本身上方或者左方的最大值,然后存储max的值,这样对角线的最后一个值就是最大值
输入
abcfbc abfcab
programming contest
abcd mnp
输出
4
2
0
这道题目的大概意思就是给你两个字符串,比较一下两个字符串里有多少个字符是相同的
这道题目我用的方法是构造一个矩阵,行是s1,列是s2 ,当两个字符的前一个字符相等的时候就maxlen[i][j]=maxlen[i-1][j-1]+1.即对角线上的上面一个的值加1,否则就比较本身上方或者左方的最大值,然后存储max的值,这样对角线的最后一个值就是最大值
输入
abcfbc abfcab
programming contest
abcd mnp
输出
4
2
0
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
const int N=1001;
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
string s1,s2;
int maxlen[N][N];
while(cin>>s1>>s2)
{
int length1=s1.length();
int length2=s2.length();
for(int i=0;i<=length1;i++)
maxlen[i][0]=0;
for(int j=0;j<=length2;j++)
maxlen[0][j]=0;
for(int i=1;i<=length1;i++)
for(int j=1;j<=length2;j++)
{
if(s1[i-1]==s2[j-1])
maxlen[i][j]=maxlen[i-1][j-1]+1;
else
maxlen[i][j]=max(maxlen[i-1][j],maxlen[i][j-1]);
}
printf("%d\n",maxlen[length1][length2]);
}
return 0;
}