工具实现揭秘文本工具
文本对比是怎么实现的
逐行 diff 算法入门——最长公共子序列如何标出两段文本的增删
TL;DR:文本对比把两段文本逐行比对,标出哪些行新增、哪些行删除、哪些行相同——就是代码仓库里 diff 的网页版。本篇讲它的算法核心(最长公共子序列)和工程上的取舍。
⏱️ 30 秒上手
- 打开 tools.guangmin.top/tools/text_diff;
- 左框贴原文,右框贴改后的文本;
- 对比结果实时出现:绿色为新增行、红色为删除行;
- 点「复制」导出带标记的结果。
🔧 它是怎么实现的
核心算法:最长公共子序列(LCS)
「两段文本哪里改了」的数学表述是:找到两个行序列的最长公共子序列(LCS,即两边都按顺序出现、可以跳过中间元素的最长行序列),公共部分对齐,剩下的就是增删。
动态规划(DP,用一张表格把大问题拆成小问题逐格求解的方法)在这里的规模是 A 行数 × B 行数——两段几百行的文本对比,浏览器毫秒级算完。
工程取舍
- 按行而不按字符:人读的 diff 以行为单位才有意义(字符级 diff 会把整段搅碎);空行参与比对但展示上折叠;
- 输入即算:与大小写转换一样是实时派生,没有「开始对比」按钮——两框都有内容时结果永远最新;
- 不做文件上传:文本内容只在浏览器内存里,关页面即消失。
📏 边界与限制
| 项 | 说明 |
|---|---|
| 文本规模 | 数千行以内体验流畅(DP 表平方级增长) |
| 对比粒度 | 行级;行内字符级差异不单独标注 |
| 结果格式 | 带标记的行序列,可一键复制 |