题解 | 计算字符串的编辑距离
计算字符串的编辑距离
https://www.nowcoder.com/practice/3959837097c7413a961a135d7104c314?tpId=37&tags=579&title=&difficulty=3&judgeStatus=&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&dayCountBigMember=365%E5%A4%A9&gioEnter=menu
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let cnt = 0; const input: string[] = []; rl.on("line", function (line) { input.push(line); cnt++; }); rl.on("close", function () { const [A, B] = input; console.log(minDistance(A, B)); }); function minDistance(strA: string, strB: string) { const lenA = strA.length; const lenB = strB.length; // 字符串相等时编辑距离为 0 if (strA === strB) { return 0; } // 某个字符串长度为 0 时,编辑距离为另一个字符串长度 if (lenA * lenB === 0) { return lenA + lenB; } const dp: number[][] = []; for (let i = 0; i <= lenA; i++) { dp[i] = new Array(lenB).fill(0) for (let j = 0; j <= lenB; j++) { if (i * j) { dp[i][j] = strA[i - 1] === strB[j - 1] ? dp[i - 1][j - 1] : Math.min( dp[i - 1][j - 1], // 替换 dp[i - 1][j], // 插入 B dp[i][j - 1], // 插入 A ) + 1 } else { dp[i][j] = i + j } } } return dp[lenA][lenB] }