给定一个字符串S,我想计算S的不同回文子串的数量。我知道基本的O(n ^ 2)方法。但是我想找到一个更好的方法来处理非常大的字符串(大约10 ^ 5)。
所以我想要一种更有效的算法。
示例:
说S = xyx,那么回文计数器必须返回3作为答案,因为S有三个回文子串:{x,xyx,y}。
我的代码:
int countPalindrome(char *str)
{
int i,j,k,count=0;
for(i=0;str[i];i++)
{
k=i-1;j=i+1; //count odd length palindromes
while(k>=0 && str[j] && str[k]==str[j])
{
++count;
k--;j++;
}
k=i;j=i+1; //count even length palindrome
while(k>=0 && str[j] && str[k]==str[j])
{
++count;
k--;j++;
}
}
return count;
}
显然它的O(n ^ 2)甚至没有提供明显但所有的回文。可以有人提供更好的算法来计算不同的回文子串