Skip to content

Palindromic Strings

LeetCode Problem

# https://leetcode.com/problems/longest-palindromic-substring/description/j
# length of palindrome = right - left + 1
# T : O(n^2)


class Solution:
    def longestPalindrome(self, s: str) -> str:
        ans = ""
        ans_length = 0
        for i in range(len(s)):
            # odd length palindromes
            l, r = i, i
            # palindrome and in bounds
            while l >= 0 and r < len(s) and s[l] == s[r]:
                if (r - l + 1) > ans_length:
                    ans = s[l : r + 1]
                    ans_length = r - l + 1
                l -= 1
                r += 1

            # even length palindromes
            l, r = i, i + 1
            while l >= 0 and r < len(s) and s[l] == s[r]:
                if (r - l + 1) > ans_length:
                    ans = s[l : r + 1]
                    ans_length = r - l + 1
                l -= 1
                r += 1
        return ans


# count number of palindromic strings


def count_palindromic_substrings(s):
    count = 0
    n = len(s)

    # Check for odd-length palindromic substrings
    for i in range(n):
        l = i
        r = i
        while l >= 0 and r < n and s[l] == s[r]:
            count += 1
            l -= 1
            r += 1

    # Check for even-length palindromic substrings
    for i in range(n - 1):
        l = i
        r = i + 1
        while l >= 0 and r < n and s[l] == s[r]:
            count += 1
            l -= 1
            r += 1

    return count


s = "ABC"
print(count_palindromic_substrings(s))  # Output: 3

s = "AAA"
print(count_palindromic_substrings(s))  # Output: 6