发布时间:2019-09-22整理:admin阅读:
// initiate the direction matrixint **LCS_direction;LCS_direction = (int**)(new int[length1]);for( i = 0; i < length1; ++ i)LCS_direction[i] = (int*)new int[length2];for(i = 0; i < length1; ++ i)for(j = 0; j < length2; ++ j)LCS_direction[i][j] = kInit;for(i = 0; i < length1; ++ i){for(j = 0; j < length2; ++ j){if(i == 0 || j == 0){if(pStr1[i] == pStr2[j]){LCS_length[i][j] = 1;LCS_direction[i][j] = kLeftUp;}elseLCS_length[i][j] = 0;}// a char of LCS is found, // it comes from the left up entry in the direction matrixelse if(pStr1[i] == pStr2[j]){LCS_length[i][j] = LCS_length[i - 1][j - 1] + 1;LCS_direction[i][j] = kLeftUp;}// it comes from the up entry in the direction matrixelse if(LCS_length[i - 1][j] > LCS_length[i][j - 1]){LCS_length[i][j] = LCS_length[i - 1][j];LCS_direction[i][j] = kUp;}// it comes from the left entry in the direction matrixelse{LCS_length[i][j] = LCS_length[i][j - 1];LCS_direction[i][j] = kLeft;}}}LCS_Print(LCS_direction, pStr1, pStr2, length1 - 1, length2 - 1);return LCS_length[length1 - 1][length2 - 1];}/////////////////////////////////////////////////////////////////////////////// Print a LCS for two strings// Input: LCS_direction - a 2d matrix which records the direction of // LCS generation// pStr1 - the first string// pStr2 - the second string// row - the row index in the matrix LCS_direction// col - the column index in the matrix LCS_direction/////////////////////////////////////////////////////////////////////////////void 欢迎分享转载→ 程序员面试题精选100题(20)-最长公共子串[算法](3)