두 글자 단어를 연결하여 가장 긴 회문
words
이 제공됩니다. words
의 각 요소는 두 개의 영문 소문자로 구성됩니다.words
에서 일부 요소를 선택하고 원하는 순서로 연결하여 가능한 가장 긴 회문을 만듭니다. 각 요소는 최대 한 번만 선택할 수 있습니다.생성할 수 있는 가장 긴 회문의 길이를 반환합니다. 회문을 생성할 수 없는 경우
0
를 반환합니다.회문(palindrome)은 앞으로 읽으나 뒤로 읽으나 같은 문자열입니다.
예 1:
입력: 단어 = ["lc","cl","gg"]
출력: 6
설명: 가장 긴 회문은 길이가 6인 "lc"+ "gg"+ "cl"= "lcggcl"입니다.
"clgglc"는 만들 수 있는 또 다른 가장 긴 회문입니다.
예 2:
입력: 단어 = ["ab","ty","yt","lc","cl","ab"]
출력: 8
설명: 가장 긴 회문은 길이가 8인 "ty"+ "lc"+ "cl"+ "yt"= "tylcclyt"입니다.
"lcyttycl"은 만들 수 있는 또 다른 가장 긴 회문입니다.
예 3:
입력: 단어 = ["cc","ll","xx"]
출력: 2
설명: 가장 긴 회문 중 하나는 길이가 2인 "cc"입니다.
"ll"은 만들 수 있는 또 다른 가장 긴 회문이며 "xx"도 마찬가지입니다.
제약:
1 <= words.length <= 105
words[i].length == 2
words[i]
영문 소문자로 구성되어 있습니다. 해결책:
from collections import Counter
class Solution:
def longestPalindrome(self, words: List[str]) -> int:
ctr = Counter(words)
longest = 0
isDouble = False
for word in list(ctr.keys()):
if word[0] == word[1]:
longest += 4 * (ctr[word] // 2)
rem = ctr[word] % 2
ctr[word] = rem
if rem == 1:
isDouble = True
else:
k = min(ctr[word], ctr[word[::-1]])
longest += 4 * k
ctr[word] -= k
ctr[word[::-1]] -= k
if isDouble:
longest += 2
return longest
Reference
이 문제에 관하여(두 글자 단어를 연결하여 가장 긴 회문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/longest-palindrome-by-concatenating-two-letter-words-3hfj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)