111*_*001 9 algorithm palindrome
我知道你可以找到最长的回文子在O(N)与manacher的算法,但有可能找到的总人数在O(N)或O的回文子的(N log n)的?如果是这样,你会怎么做呢?
将单个字母计为回文.
因此,例如," xyxyx " 的回文子串的数量是9.
这是因为你有:
5 single letter palindromes (x,y,x,y,x)
3 palindromes with three letters (xyx, yxy, xyx)
1 palindrome with five letters (xyxyx)
for a total of 5+3+1 = 9 palindromic substrings.
Run Code Online (Sandbox Code Playgroud)
字符串的子S'字符串S是半径的最大回文iiff,从中间开始,它在i字符的两个方向上读取相同,但不是i+1字符.
字符串中的任何回文必须是具有相同中心的最大回文的子串.相反,具有相同中心的最大回文的每个子串也必须是回文.我们也可以很容易地计算具有相同中心的副回文数:长度k包含Ceiling(k/2)它们的回文.
鉴于我们可以在线性时间内使用Manacher算法找到所有最大回文,我们为您的问题提供线性时间算法:找到最大回文长度数组,除以2,取上限,求数组.
实施例1:在"xyxyx"上,最大回文是
x, xyx, xyxyx, xyx, x
Run Code Online (Sandbox Code Playgroud)
和Manacher's可以用来计算一个数组
1, 0, 3, 0, 5, 0, 3, 0, 1
Run Code Online (Sandbox Code Playgroud)
表示以每个字母为中心的最大回文长度和字母之间的每个间隙.无论如何,将地图Ceiling(k/2)应用于条目,我们得到
1, 0, 2, 0, 3, 0, 2, 0, 1
Run Code Online (Sandbox Code Playgroud)
总计为9.
例2:"abba".最大的回文是
a, b, abba, b, a
Run Code Online (Sandbox Code Playgroud)
Manacher可用于获取阵列
1, 0, 1, 4, 1, 0, 1
Run Code Online (Sandbox Code Playgroud)
并且Ceiling(k/2)'d数组是
1, 0, 1, 2, 1, 0, 1
Run Code Online (Sandbox Code Playgroud)
总和为6(a,b,b,a,bb,abba).