[LeetCode]2131. Longest Palindrome by Concatenating Two Letter Words (Medium) Python-2022.11.03
Posted on 2022-11-03 14:43 Uriel 閱讀(67) 評論(0) 編輯 收藏 引用 所屬分類: 貪心 、閑來無事重切Leet Code給定一堆長度為2的字符串,問最長可以構(gòu)成多長的回文字符串
用python字典統(tǒng)計(jì)每一種長度2的字符串i出現(xiàn)的次數(shù)dict_word[i]
將長度為2的字符串分為兩類:
第一類:ab型,即兩個字母不同,那么需要找對應(yīng)的ba字符串
用python字典統(tǒng)計(jì)每一種長度2的字符串i出現(xiàn)的次數(shù)dict_word[i]
將長度為2的字符串分為兩類:
第一類:ab型,即兩個字母不同,那么需要找對應(yīng)的ba字符串
ans = ans + 4 * min(dict_word[‘ab’], dict_word[‘ba’])
第一類:aa型,即兩個字母不同,如果dict_word[‘aa’]出現(xiàn)奇數(shù)次,那么多出來的那一個只能放中間(如果有不止一個aa型字符串,且出現(xiàn)字?jǐn)?shù)不止一次出現(xiàn)奇數(shù),那正中間位置也只能放一個
第一類:aa型,即兩個字母不同,如果dict_word[‘aa’]出現(xiàn)奇數(shù)次,那么多出來的那一個只能放中間(如果有不止一個aa型字符串,且出現(xiàn)字?jǐn)?shù)不止一次出現(xiàn)奇數(shù),那正中間位置也只能放一個
ans = ans + 4 * (dict_word[i] // 2) + double_chr * 2 (double_chr記錄是否出現(xiàn)過奇數(shù)次的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
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