寻找回文:变体与算法
1. 引言
Rinus Plasmeijer 出生于 1952 年 10 月 26 日,将这个日期倒过来是 1962 年 1 月 25 日,与原日期相近但不完全相同,这是近似回文的一个例子。回文长期以来被视为文字游戏中的有趣奇趣,如今我们知道回文在 DNA 中也起着重要作用。在乌得勒支大学图书馆的电子出版物中搜索“回文”,能得到 500 多个结果,其中前 10 个都与 DNA 中的回文有关。据推测,这 500 篇出版物中至少 90% 是关于 DNA 回文的。DNA 利用回文存储信息来修复基因,例如男性 DNA 中包含巨大的、中间有缺口的近似回文,有些回文长度超过一百万个碱基对,像男性睾丸的关键基因就编码在这些回文上。
我们需要软件来在大段文本中寻找回文,或者在 DNA 中寻找有缺口的近似回文。判断字符串是否为回文以及在字符串中寻找回文的算法在计算机科学中有着悠久的历史。本文将讨论寻找回文问题的一些变体,描述它们的属性,并给出两种寻找回文的算法。
2. 什么是回文?
2.1 基本回文
判断一个字符串(字符列表)是否为回文的最简单方法是将字符串反转并与原字符串进行比较。如果字符串 xs 与其反转后的字符串相等,即 xs == reverse xs ,那么 xs 就是一个回文。在 Haskell 中可以这样实现:
palindrome :: String -> Bool
palindrome xs = xs == reverse xs
</
回文变体与高效算法
超级会员免费看
订阅专栏 解锁全文
27

被折叠的 条评论
为什么被折叠?



