← 返回工具箱
📄 文本对比

输入两段文本进行对比

📖 Diff算法与文本对比

Diff(差异对比)是用于比较两段文本(或两个文件)之间差异的技术。最经典的diff算法基于最长公共子序列(LCS, Longest Common Subsequence)问题,由Eugene Myers在1986年提出的改进算法至今仍被Git等工具广泛使用。

Diff输出格式

符号含义颜色(通常)
-(减号开头的行)仅在原始文本中存在(被删除)红色
+(加号开头的行)仅在修改后文本中存在(新增)绿色
(空格开头的行)两边相同,未修改的上下文无高亮
@@...@@差异块的位置信息(行号范围)蓝色/紫色
Diff输出示例:

@@ -1,4 +1,4 @@
第一行不变
-第二行被删除
+第二行被修改了
第三行不变
第四行不变

LCS算法原理

最长公共子序列(LCS)算法通过动态规划找出两个序列中最长的公共子序列。Diff工具利用LCS确定哪些行是相同的(保留),哪些是新增或删除的。

动态规划状态转移方程:

若 A[i] == B[j]: dp[i][j] = dp[i-1][j-1] + 1
否则: dp[i][j] = max(dp[i-1][j], dp[i][j-1])

时间复杂度:O(m × n)
空间复杂度:O(m × n)

常见使用场景

场景说明
代码审查(Code Review)查看Pull Request中代码的具体改动
版本控制比较不同版本的文件差异
文档对比找出合同、文章的修改之处
配置文件对比比较不同环境的配置差异
数据库迁移对比SQL脚本的变更
调试排错比较正常输出与异常输出的差异
💡 小贴士:在比较文本时,建议先统一换行符格式(LF或CRLF)和编码格式(UTF-8),避免因为格式差异产生大量无意义的diff结果。在Git中可以通过设置 core.autocrlf 来自动处理换行符差异。