Longest Palindrome
Question (LC.409)
Example
I: s = "abccccdd"
O: 7 because ccdadcc
I: s = "a"
O: 1Analysis
Code
from collections import defaultdict
class Solution:
def longestPalindrome(self, s: str) -> int:
if len(s) == 0:
return 0
letter_freq: Dict[str, int] = defaultdict(int)
for cha in s:
letter_freq[cha] += 1
sorted_keys = sorted(letter_freq, key=letter_freq.get, reverse=True)
max_len = 0
extra_one = False
for i in range(len(sorted_keys)):
cur_freq = letter_freq[sorted_keys[i]]
if cur_freq == 1:
max_len += cur_freq
return max_len
if is_even(cur_freq):
max_len += cur_freq
else:
max_len += cur_freq - 1
extra_one = True
if extra_one:
return max_len + 1
return max_len
def is_even(freq: int) -> bool:
return freq % 2 == 0
Time Complexity
Last updated