不同回文子串的数量

时间:2013-12-09 14:48:27

标签: string algorithm substring time-complexity palindrome

给定一个字符串,我知道如何使用Manacher算法在线性时间内找到回文子串的数量。但现在我需要找到 distinct / unique 回文子串的数量。现在,这可能导致O(n + n ^ 2)算法 - 一个'n'用于查找所有这些子串,并且n ^ 2用于将这些子串中的每一个与已经找到的子串进行比较,以检查它是否是唯一的。

我确信有一种算法具有更好的复杂性。我想也许用后缀树试试我的运气?是否存在具有更好时间复杂度的算法?

2 个答案:

答案 0 :(得分:3)

我只是将您找到的子字符串放入哈希表中,以防止两次保持相同的结果。

哈希表的访问时间是O(1)。

答案 1 :(得分:0)

从2015年开始,存在一种线性时间算法,用于计算给定字符串S的不同回文子字符串数。您可以使用称为eertree (or palindromic tree)的数据结构,例如在链接的文件中描述。这个想法相当复杂,但是前提是要建立一个回文词条,并以与Aho-Corasick Algorithm的失败函数类似的方式用最长的适当回文后缀来增加回文词条。有关更多详细信息,请参见原始论文:https://arxiv.org/pdf/1506.04862.pdf

相关问题