Задача палиндром наибольшей длины, полученный с помощью соединений из слов, состоящих из двух букв.
https://t.me/ai_machinelearning_big_dataJune
Сложность: Средняя
Условие задачи: дан массив строк, каждый элемент которого состоит из двух букв английского алфавита в нижнем регистре.
Необходимо создать палиндром наибольшей длины путем выбора некоторых элементов из массива строк и компаниовки их в любом порядке. Каждый элемент массива можно использовать не более одного раза.
В ответе надо вернуть длину такого палидрома.
Палиндром - строка, которая одинаково читаются слева направо и справа налево.
Пример:
Ввод: words = ["lc","cl","gg"]
Вывод: 6
Объяснение: lc" + "gg" + "cl" = "lcggcl" или же "clgglc", но оба имеют максимальную длину 6.
Ввод: words = ["ab","ty","yt","lc","cl","ab"]
Вывод: 8
Объяснение: "ty" + "lc" + "cl" + "yt" = "tylcclyt" или "lcyttycl"
Ввод: words = ["cc","ll","xx"]
Вывод: 2
Решение:
class Solution:
def longestPalindrome(self, words: List[str]) -> int:
length, has_used_extra_anagram = 0, False
c, s = Counter(words), set(c.keys())
while s:
w1 = s.pop()
w2 = w1[::-1]
if w1==w2: ## anagram
length += 4 * (c[w1]//2) ## pair with itself
if not has_used_extra_anagram and c[w1]%2:
has_used_extra_anagram = True
length += 2
elif w2 in s: ## has palindrome
length += 4 * min(c[w1], c[w2])
s.remove(w2)
return length
