动态规划--LCS计算

来源:互联网 发布:linux spi驱动 编辑:程序博客网 时间:2024/05/16 15:39
int findLCS(string A, int n, string B, int m) { //生成二维矩阵  int **dp = new int*[n+1];  for (int i = 0; i < n+1; i++)  dp[i] = new int[m+1];//由于这边是定义了[n+1][m+1],所以对于A,B的值序号都要减1     //dp的第一列  for (int i = 0; i < n + 1; i++)  {  dp[i][0] = 0;   }  //dp的第一行  for (int j = 0; j < m + 1; j++)  {  dp[0][j] = 0;  }  //其他位置的dp值  for (int i = 1; i < n + 1; i++)  {  for (int j = 1; j < m + 1; j++)  {  if (A[i-1] == B[j-1])//因为数组时从0开始计算的,所以要相对应的值减1  {   dp[i][j] = dp[i - 1][j - 1] + 1;  }  else  dp[i][j] = dp[i - 1][j] > dp[i][j - 1] ? dp[i - 1][j] : dp[i][j - 1];  }    }  return dp[n][m];  }


给定两个字符串A和B,返回两个字符串的最长公共子序列的长度。例如,A="1A2C3D4B56”,B="B1D23CA45B6A”,”123456"或者"12C4B6"都是最长公共子序列。

给定两个字符串AB,同时给定两个串的长度nm,请返回最长公共子序列的长度。保证两串长度均小于等于300。

 

 

原创粉丝点击