最长公共子序列(LCS)(一)---动态规划

来源:互联网 发布:淘宝布局管理无法看 编辑:程序博客网 时间:2024/05/29 07:14

利用动态规划算法实现最长公共子序列:

#include <iostream>#include <string>#include <csetjmp>using namespace std;int max(int a, int b){    return a > b ? a : b;}int LCS(string& s1, string&s2){    int s1_len = s1.length();    int s2_len = s2.length();    int**p;    p = new int*[s1_len+1];    for (int i = 0; i < s1_len+1; i++){        p[i] = new int[s2_len+1];    }    for (int i = 0; i < s1_len+1; i++){        for (int j = 0; j < s2_len+1; j++){            if (i == 0 || j == 0){                p[i][j] = 0;            }            else{                if (s1.at(i - 1) == s2.at(j - 1)){                    p[i][j] = p[i - 1][j - 1] + 1;                }                else{                    p[i][j] = max(p[i - 1][j], p[i][j - 1]);                }            }        }    }    int k = p[s1_len][s2_len];    for (int i = 0; i < s1_len; i++){        delete[] p[i];    }    delete[] p;    return k;}int main(){    string s = "ATGTCTATTCTGTC";    string s2 = "AGTCATCTGTC";    int z = LCS(s, s2);    cout << z << endl;    return 0;}

运行结果:
这里写图片描述

阅读全文
0 0
原创粉丝点击