/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* longest common subsequence
* @param s1 string字符串 the string
* @param s2 string字符串 the string
* @return string字符串
*/
#define max(a,b) a>b?a:b
char* LCS(char* s1, char* s2 ) {
// write code here
int row = strlen(s2) + 1;
int col = strlen(s1) + 1;
int len_calculator[row][col];
int i = 0;
for(; i < col; i++) {
len_calculator[0][i] = 0;
}
int j;
for(i = 1; i < row; i++) {
j = 0;
len_calculator[i][j] = 0;
for(j = 1; j < col; j++) {
if(s2[i - 1] == s1[j - 1]) {
len_calculator[i][j] = len_calculator[i - 1][j - 1] + 1;
} else {
len_calculator[i][j] = max(len_calculator[i - 1][j], len_calculator[i][j - 1]);
}
}
}
char *ret = (char*)malloc(len_calculator[row - 1][col - 1] + 1);
if(len_calculator[row - 1][col - 1] == 0) {
return "-1";
}
ret[len_calculator[row - 1][col - 1]] = '\0';
i = row - 1;
j = col - 1;
int index = len_calculator[i][j] - 1;
while(i > 0 && j > 0) {
if(len_calculator[i][j] == len_calculator[i - 1][j]) {
i--;
} else if(len_calculator[i][j] == len_calculator[i][j - 1]) {
j--;
} else {
ret[index--] = s2[i - 1];
i--;
j--;
}
}
return ret;
}