let table1 = []; //紀錄數字 let table2 = []; //紀錄箭頭 let str1 = "ANB"; let str2 = "AKB";
constLCS = (str1, str2) => { let m = str1.length; let n = str2.length; //預先建立好格子 for (let i = 0; i <= m; i++) { let arr = Array.from({ length: n }).fill(null); table1[i] = [0, ...arr]; } table1[0].fill(0);
for (let i = 0; i <= m; i++) { let arr = Array.from({ length: n + 1 }).fill(null); table2[i] = arr; } //依序將數字和箭頭填入表格 for (let i = 1; i <= m; i++) { for (let j = 1; j <= n; j++) { //由於是二維陣列的比較起始點是從1開始, 所以對應的的字串index需-1 if (str1[i - 1] === str2[j - 1]) { table1[i][j] = 1 + table1[i - 1][j - 1]; //左上角的格子 table2[i][j] = "↖"; } elseif (table1[i - 1][j] >= table1[i][j - 1]) { //上方格子大於等於左方的格子 table1[i][j] = table1[i - 1][j]; table2[i][j] = "↑"; } else { table1[i][j] = table1[i][j - 1]; table2[i][j] = "←"; } } } console.log("table1", table1); console.log("table2", table2); return table1[m][n]; //回傳LCS長度 };