Time: 363 ms (42.41%), Space: 17.8 MB (83.35%) - LeetHub

This commit is contained in:
Deven
2025-11-26 15:33:48 -05:00
parent 05038ff089
commit 0d4a52234a
@@ -2,28 +2,40 @@ class Solution:
def longestPalindrome(self, s: str) -> str: def longestPalindrome(self, s: str) -> str:
""" """
Complexities: Complexities:
Time: O(n^3) Time: O(n^2)
Space: O(1) Space: O(1)
where n = len(s) where n = len(s)
""" """
# indicies inclusive - O(n) # Returns the longest palindrome centered at s[i] or (s[i], s[i + 1])
def isPalindrome(startIndex: int, endIndex: int): # - O(n)
if startIndex >= endIndex: def longestPalindromeFromCenter(i: int, evenCentered: bool):
return True offset = 1
evenOffset = 1 if evenCentered else 0
if s[startIndex] == s[endIndex]: while i - offset >= 0 and i + offset + evenOffset < len(s) and s[i - offset] == s[i + offset + evenOffset]:
return isPalindrome(startIndex + 1, endIndex - 1) offset += 1
return False
offset -= 1 # Account for off-by-one
return s[i - offset : i + offset + evenOffset + 1]
maxPalindrome = s[0] maxPalindrome = s[0]
# For each letter, check if it is the center of a palindrome (or center with s[i+1])
# - O(n^2) = n * 2(O(n))
for i in range(len(s)): for i in range(len(s)):
for j in range(i + 1, len(s)): # Check for an even length palindrome
length = j - i + 1 if i + 1 < len(s) and s[i] == s[i+1]:
if length > len(maxPalindrome) and isPalindrome(i, j): evenPalindrome = longestPalindromeFromCenter(i, True)
maxPalindrome = s[i:j+1]
if len(evenPalindrome) > len(maxPalindrome):
maxPalindrome = evenPalindrome
oddPalindrome = longestPalindromeFromCenter(i, False)
if len(oddPalindrome) > len(maxPalindrome):
maxPalindrome = oddPalindrome
return maxPalindrome return maxPalindrome