最长公共子序列为何能解决十几类LeetCode问题从字符串相似度到DNA比对的动态规划精髓

每次你在终端输入 git diff,后台都在运行一个你可能刷过无数次的算法题——最长公共子序列。这不是巧合,而是计算机科学中最优雅的算法之一在实际工程中的自然落地。从版本控制到生物信息学,从拼写检查到数据压缩,LCS 找到了两个序列之间"最相似的部分",而这个看似简单的问题背后,隐藏着动态规划的精髓。 ...

10 min · 4739 words

字符串匹配算法为何如此重要从KMP到Z函数的线性时间突围

假设你需要在一段百万字的文本中搜索一个关键词。最直观的方法是:将关键词与文本的每个位置逐一比较——时间复杂度 $O(nm)$,其中n是文本长度,m是关键词长度。当文本达到百万级别时,这个算法可能需要数秒甚至更长。 ...

9 min · 4081 words

字典树(Trie):用共享前缀把字符串检索从O(n)降到O(L)

假设你在搜索引擎输入框里键入"goog",下拉列表立刻弹出"google"、“google maps”、“google translate"等一系列建议。这些结果是怎么在毫秒级时间内出现的?如果用哈希表存储所有可能的搜索词,每次按键都需要遍历整个哈希表来找出以当前输入为前缀的词——当词库达到百万级别时,这种做法显然不可行。 ...

12 min · 5578 words