最长公共子序列

男娘i 2022-09-30 10:00 333阅读 0赞
  1. #include <iostream>
  2. #include <assert.h>
  3. #include <string>
  4. using namespace std;
  5. #define Max(a,b) (a)>(b)?(a):(b)
  6. int main(void)
  7. {
  8. string str1 = "abcdss";
  9. string str2 = "asbda";
  10. int len1 = str1.length();
  11. int len2 = str2.length();
  12. int A[50][50] = { 0 };
  13. for (int i = 1; i <= len1; i++)
  14. {
  15. for (int j = 1; j <= len2; j++)
  16. {
  17. if (str1[i-1] == str2[j-1])
  18. {
  19. A[i][j] = A[i - 1][j - 1] + 1;
  20. }
  21. else
  22. {
  23. A[i][j] = Max(A[i - 1][j], A[i][j - 1]);
  24. }
  25. }
  26. }
  27. cout << "最长公共子序列元素个数: "<<A[len1][len2]<<endl;
  28. cout << "最长公共序列(逆序)" << endl;
  29. for (int i = len1-1,j = len2-1; i >= 0 && j >= 0; )
  30. {
  31. if (str1[i] == str2[j])
  32. {
  33. cout << str1[i];
  34. i--; j--;
  35. }
  36. else
  37. {
  38. if (A[i][j+1] >= A[i+1][j])
  39. {
  40. i--;
  41. }
  42. else
  43. {
  44. j--;
  45. }
  46. }
  47. }
  48. return 0;
  49. }

参考博客: http://www.cnblogs.com/huangxincheng/archive/2012/11/11/2764625.html

发表评论

表情:
评论列表 (有 0 条评论,333人围观)

还没有评论,来说两句吧...

相关阅读

    相关 公共序列

    最长公共子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列

    相关 公共序列

    一个序列的子序列是该序列中删除某些元素后得到的序列。给定两个子序列X和Y,求二者的最长公共子序列。 例如,X=\{A,B,C,B,D,A,B\},Y=\{B,D,C,A,B,

    相关 公共序列

    最长公共子序列 最长公共子序列与最长公共子串的区别在于最长公共子序列不要求在原字符串中是连续的,比如ADE和ABCDE的最长公共子序列是ADE。 我们用动态规划的方法来思考