字符串算法:概览
Published: Sat Feb 21 2026 | Modified: Sat Feb 07 2026 , 1 minutes reading.
字符串算法:编织文字的人
巴别图书馆
想象一座包含了字母所有可能组合的图书馆。在那无限的混乱中寻找一个特定的句子似乎是不可能的。 字符串算法就是这片混乱中的图书管理员。它们回答两个基本问题:
- 搜索: “这本书里有‘爱’这个字吗?”
- 压缩: “我能用更少的页数重写这本书而不丢失任何含义吗?”
在软件中,字符串无处不在。源代码、DNA 序列、HTTP 请求和用户日志本质上都是字符串。掌握字符串算法意味着掌握信息流本身。
模式的策略
在本章中,我们将探索处理文本的不同方式:
| 概念 | 灵魂 / 隐喻 | 代表算法 | 最佳应用场景 |
|---|---|---|---|
| 前缀 | 先知 根据你已经输入的内容预测未来。 | Trie 树 (前缀树) | 自动补全 “搜索联系人…” |
| 匹配 | 单向舞者 从不回头。如果匹配失败,它会智能地向前滑动。 | KMP (Knuth-Morris-Pratt) | 搜索 (Ctrl+F) 在文本中查找关键字。 |
| 相似度 | 误差测量者 计算两个单词之间隔了多少个错别字。 | Levenshtein 距离 (编辑距离) | 拼写检查 “您是不是要找…?” |
| 压缩 | 哈夫曼树 给常用词分配短代码,给罕见词分配长代码。 | 哈夫曼编码 (Huffman) | ZIP / JPEG 减小文件体积。 |
字符串的三大法则
- 前缀 vs. 后缀: 大多数字符串魔法都发生在边缘。知道一个字符串如何开始(前缀)或如何结束(后缀),往往能告诉你关于中间部分的一切。
- 状态机: 字符串算法通常只是一个在状态序列中移动的机器人。“我看到了一个 ‘H’,现在我在等一个 ‘E’…”
- 字母表大小: 复杂度往往取决于字母表 () 的大小。搜索二进制 (0/1) 与搜索中文文本 (20,000+ 字符) 是不同的挑战。
小结
在本章中,我们将看到搜索引擎如何索引网络,以及 ZIP 文件如何将千兆字节压缩为兆字节。我们将明白,文本不仅仅是数据;它是一种等待被发现的结构。
让我们从最直观的结构开始:Trie 树。
