給定一堆長度為2的字符串,問最長可以構成多長的回文字符串
用python字典統計每一種長度2的字符串i出現的次數dict_word[i]
將長度為2的字符串分為兩類:
第一類:ab型,即兩個字母不同,那么需要找對應的ba字符串
ans = ans + 4 * min(dict_word[‘ab’], dict_word[‘ba’])
第一類:aa型,即兩個字母不同,如果dict_word[‘aa’]出現奇數次,那么多出來的那一個只能放中間(如果有不止一個aa型字符串,且出現字數不止一次出現奇數,那正中間位置也只能放一個
ans = ans + 4 * (dict_word[i] // 2) + double_chr * 2 (double_chr記錄是否出現過奇數次的aa型字符串)
1 #2131
2 #Runtime: 1376 ms
3 #Memory Usage: 37.8 MB
4
5 class Solution(object):
6 def longestPalindrome(self, words):
7 """
8 :type words: List[str]
9 :rtype: int
10 """
11 dict_word = {}
12 for i in words:
13 if i in dict_word:
14 dict_word[i] += 1
15 else:
16 dict_word[i] = 1
17 ans = 0
18 double_chr = 0
19 for i in dict_word:
20 j = i[::-1]
21 if i == j:
22 if dict_word[i] % 2:
23 double_chr = 1
24 ans += 4 * (dict_word[i] // 2)
25 else:
26 if j in dict_word:
27 ans += 4 * min(dict_word[i], dict_word[j])
28 dict_word[j] = 0
29 return ans + double_chr * 2