diff --git a/0647-Palindromic-Substrings.py b/0647-Palindromic-Substrings.py new file mode 100644 index 0000000..5ffa59e --- /dev/null +++ b/0647-Palindromic-Substrings.py @@ -0,0 +1,42 @@ +''' +Given a string, your task is to count how many palindromic substrings in this string. + +The substrings with different start indexes or end indexes are counted as different substrings even they consist of same characters. + +Example 1: + +Input: "abc" +Output: 3 +Explanation: Three palindromic strings: "a", "b", "c". + + + +Example 2: + +Input: "aaa" +Output: 6 +Explanation: Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa". + + + +Note: + + The input string length won't exceed 1000. +''' +class Solution: + def countSubstrings(self, s: str) -> int: + + def manachers(S): + A = '@#' + '#'.join(S) + '#$' + Z = [0] * len(A) + center = right = 0 + for i in range(1, len(A) - 1): + if i < right: + Z[i] = min(right - i, Z[2 * center - i]) + while A[i + Z[i] + 1] == A[i - Z[i] - 1]: + Z[i] += 1 + if i + Z[i] > right: + center, right = i, i + Z[i] + return Z + + return sum((v + 1) // 2 for v in manachers(s))