思路:
0.用map记录
1.找出不相等的但有对称的,取最小
2.找出相等的然后偶数的话可以22配对
3.奇数的话可以放在中间,结果+2
代码:
class Solution:
def longestPalindrome(self, words: List[str]) -> int:
'''
def isHuiWen(s):
for i in range(len(s) // 2):
if s[i] != s[len(s) - 1 - i]:
return False
return True
'''
# 来个dict记录一下
myDict = defaultdict(int)
for word in words:
myDict[word] += 1
res = 0
# 记录有没有单着的'XX'
flag = False
for word in myDict:
# 先看不重复的
if word != word[::-1]:
if word[::-1] not in myDict:
continue
res += min(myDict[word], myDict[word[::-1]]) * 4
# 变成0
myDict[word] = 0
myDict[word[::-1]] = 0
# 再看重复的
else:
print(word)
if myDict[word] >= 2:
res += (myDict[word] // 2) * 4
if myDict[word] % 2 == 1:
flag = True
if flag:
res += 2
return res
具体细节请看注释