UNPKG

ts-ds-tool

Version:

Data structure and algorithm of TypeScript

66 lines (65 loc) 1.87 kB
export function lcstr(text1, text2) { if (!text1 || !text2) { return ""; } const length1 = text1.length; const length2 = text2.length; const arr = new Array(length1 + 1); for (let index = 0; index <= length1; index++) { arr[index] = new Array(length2 + 1).fill(0); } let maxCol = 0, maxRow = 0, longestLength = 0; for (let i = 1; i <= length1; i++) { for (let j = 1; j <= length2; j++) { if (text1[i - 1] === text2[j - 1]) { arr[i][j] = arr[i - 1][j - 1] + 1; } if (arr[i][j] > longestLength) { longestLength = arr[i][j]; maxRow = i; maxCol = j; } } } const subArr = []; while (arr[maxRow][maxCol] > 0) { subArr.unshift(text1[maxRow - 1]); maxRow--; maxCol--; } return subArr.join(""); } export function lcstropt(text1, text2) { if (!text1 || !text2) { return ""; } const length1 = text1.length; const length2 = text2.length; const arr = new Array(length2 + 1).fill(0); const topArr = new Array(length2 + 1).fill(0); let maxCol = 0, longestLength = 0; for (let i = 1; i <= length1; i++) { for (let j = 1; j <= length2; j++) { if (text1[i - 1] === text2[j - 1]) { arr[j] = topArr[j - 1] + 1; } else { arr[j] = 0; } if (arr[j] > longestLength) { longestLength = arr[j]; maxCol = j; } } for (let k = 0; k < arr.length; k++) { topArr[k] = arr[k]; } } const subArr = []; while (longestLength > 0) { subArr.unshift(text2[maxCol - 1]); maxCol--; longestLength--; } return subArr.join(""); }