给定一个字符串,我知道如何使用Manacher算法在线性时间内找到回文子串的数量。但现在我需要找到 distinct / unique 回文子串的数量。现在,这可能导致O(n + n ^ 2)算法 - 一个'n'用于查找所有这些子串,并且n ^ 2用于将这些子串中的每一个与已经找到的子串进行比较,以检查它是否是唯一的。
我确信有一种算法具有更好的复杂性。我想也许用后缀树试试我的运气?是否存在具有更好时间复杂度的算法?
答案 0 :(得分:3)
我只是将您找到的子字符串放入哈希表中,以防止两次保持相同的结果。
哈希表的访问时间是O(1)。
答案 1 :(得分:0)
从2015年开始,存在一种线性时间算法,用于计算给定字符串S的不同回文子字符串数。您可以使用称为eertree (or palindromic tree)的数据结构,例如在链接的文件中描述。这个想法相当复杂,但是前提是要建立一个回文词条,并以与Aho-Corasick Algorithm的失败函数类似的方式用最长的适当回文后缀来增加回文词条。有关更多详细信息,请参见原始论文:https://arxiv.org/pdf/1506.04862.pdf