mirror of
https://github.com/devenperez/leetcode.git
synced 2026-06-13 03:27:07 +00:00
Time: 363 ms (42.41%), Space: 17.8 MB (83.35%) - LeetHub
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user