题目大意不再赘述,即判断两个字符串,求出字符串中最长的公共子序列。
这是动态规划的经典题目。
#include "iostream"
#include "cstring"
using namespace std;
char sz1[1000]="abcfbc";
char sz2[1000]="abfcab";
int maxLen[1000][1000];
int max(int a,int b)
{
return a>b?a:b;
}
//理解并不困难,所以注释写的较少。
int main(){
while (cin>>sz1>>sz2){
int length1=strlen(sz1);
int length2=strlen(sz2);
int nTmp;
int i,j;
for (i=0;i<=length1;i++){
maxLen[i][0]=0;
}
for (i=0;i<=length2;i++){
maxLen[0][i]=0;
}
//最后一个数和最前面一个数做组合
//开始判断
for (i=1;i<=length1;i++){
for (j=1;j<=length2;j++){
if (sz1[i-1]==sz2[j-1]){
maxLen[i][j]=maxLen[i-1][j-1]+1;
}//两个位置上字符一样
else{
maxLen[i][j]=max(maxLen[i-1][j],maxLen[i][j-1]);
}
}
}
cout <<maxLen[length1][length2]<<endl;
}
return 0;
}