计算不同的回文子串

时间:2013-12-10 11:52:06

标签: c++ algorithm

给定一个字符串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)甚至没有提供明显但所有的回文。可以有人提供更好的算法来计算不同的回文子串

0 个答案:

没有答案