def longest_palindromic_substring(s: str) -> str:
    def expand_around_center(s: str, left: int, right: int) -> str:
        while left >= 0 and right < len(s) and s[left] == s[right]:
            left -= 1
            right += 1
        return s[left + 1:right]

    max_len = 0
    max_palindrome = ""

    for i in range(len(s)):
        # Odd-length palindrome
        palindrome = expand_around_center(s, i, i)
        if len(palindrome) > max_len:
            max_len = len(palindrome)
            max_palindrome = palindrome

        # Even-length palindrome
        palindrome = expand_around_center(s, i, i + 1)
        if len(palindrome) > max_len:
            max_len = len(palindrome)
            max_palindrome = palindrome

    return max_palindrome