- Longest Palindrome by Concatenating Two Letter Words
这题居然把我做崩溃了,看着非常简单的一个题,给的example也迅速过了。但是实际submit 发现有很多test过不了,主要是因为 他的两个字母可以重复,然后两个一样的 像aa 和不一样的 情况是不一样的。他可以放中间。
所以这题 做到最后变成了一个数学题, 先过一遍 数组,把dic存好。如果是aa这种 基数个的话吗有一个 可以放在中间,其他就不行, 所以奇偶都可以处理的方法就是 lenght 增加num//2 * 4 个。 然后类似lc cl这种也得用点 数学方法,我们目标只算一次 lc cl不要被反复计算, 所以 我们只要 字母大的那个,但是 比如 3个lc 4ge cl, 那增加的是 min(num(lc), num(cl)) * 4
class Solution:
def longestPalindrome(self, words: List[str]) -> int:
dic = collections.defaultdict(int)
length = 0
for pair in words:
dic[pair] += 1
has_mid = False
for k, v in dic.items():
if k[0] == k[1]:
if v%2 == 1:
has_mid = True
length += (v//2) * 4
elif k[::-1] in dic and k > k[::-1]:
length += min(dic[k], dic[k[::-1]]) * 4
return length + (2 if has_mid else 0)