您的位置:首页 > 其它

最大公共字串LCS问题(阿里巴巴)

2015-08-11 21:29 369 查看
给定两个串,均由最小字母组成。求这两个串的最大公共字串LCS(Longest Common Substring)。

使用动态规划解决。

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>

using namespace std;

#define MAX 100

int LCS(string left, string right){
int imax = -1;
int m = left.size();
int n = right.size();

int i,j;
int x,y;

vector<vector<int> > temp(m, vector<int>(n,0));

for(i=0; i<m; i++){
for(j=0; j<n; j++){
if(left[i] == right[j]){
if (i == 0 || j == 0){
temp[i][j] = 1;
}else{
temp[i][j] = temp[i-1][j-1] + 1;
}

if(temp[i][j] > imax){
imax = temp[i][j];
x = i;
y = j;
}
}
}
}

/* output the common substring */
i = x, j = y;
int k = imax;
string s(min(m,n),0);
s[k--] = '\0';

while(i>=0 && j>=0){
if(left[i] == right[j]){
s[k--] = left[i];
i--;
j--;
}else{
break;
}
}

cout<<s<<endl;

return imax;
}

int main(){
int result = 0;

string query, text;
cin>>query>>text;

cout<<query<<endl;
cout<<text<<endl;

result = LCS(query, text);

cout<<result;

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