您的位置:首页 > 其它

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

2017-09-19 22:45 232 查看
利用动态规划算法实现最长公共子序列:

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


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: