Given a string (assume only English characters) S of length n, we can count the number of palindromic substrings with the following algorithm:
for i = 0 to |S| do
    p1 = number of palindromes centered in i (odd length)
    p2 = number of palindromes centered in i and i+1 (even length)
    add p1 + p2 to total number of palindromic substrings of S
The above code is O(n^2) however.
I am interested in an algorithm that solves this problem in O(n). I know for sure that one exists as I've heard multiple people say that it does, and the problem exists on a local online judge site with an upper bound of 1 000 000 on n, however I've never seen the algorithm and can't seem to be able to come up with it.
Update:
The general idea I have is to compute len[i] = length of the longest palindrome centered at the character 2i + 1 and a similar array for even-length palindromes. With good bookkeeping, it should be possible to compute this in O(1) for each character, which will allow us to count a lot of palindromes all at once. I'm stuck on how exactly to compute this however.
I will accept a solution that uses O(n) and maybe even O(n log n) extra memory. I think this is impossible without it.
Any good ideas or references are appreciated.