寻找回文串的算法及变体
1. 基本回文串查找算法
首先介绍的是一种计算最大回文串长度的方法。 maximalPalindromes 函数通过先计算输入数组的所有中心位置,再计算每个中心位置周围的最大回文串长度来实现。
maximalPalindromes a = let (first, last) = bounds a
centers = [0 .. 2 * (last - first + 1)]
in map (lengthPalindromeAround a) centers
lengthPalindromeAround 函数接收一个数组和一个中心位置,计算该位置周围的最长回文串长度。
lengthPalindromeAround :: Array Int Char -> Int -> Int
lengthPalindromeAround a center
| even center = lengthPalindrome (first + c - 1) (first + c)
| odd center = lengthPalindrome (first + c - 1) (first + c + 1)
where c = div center 2
(first, last) = bounds a
超级会员免费看
订阅专栏 解锁全文
809

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



