动态规划--最长公共子序列

来源:互联网 发布:java多线程与并发视频 编辑:程序博客网 时间:2024/06/05 10:57

题目大意不再赘述,即判断两个字符串,求出字符串中最长的公共子序列。

这是动态规划的经典题目。

#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;}





0 0