LeetCode--409--最長回文串
阿新 • • 發佈:2018-09-30
str clas tro bject 情況 文字 type return []
問題描述:
給定一個包含大寫字母和小寫字母的字符串,找到通過這些字母構造成的最長的回文串。
在構造過程中,請註意區分大小寫。比如 "Aa"
不能當做一個回文字符串。
註意:
假設字符串的長度不會超過 1010。
示例 1:
輸入: "abccccdd" 輸出: 7 解釋: 我們可以構造的最長的回文串是"dccaccd", 它的長度是 7。
思路:
even = all
odd = odd -1
方法:(counter中的val排序沒有解決,先用下一個方法)
1 from collections import Counter 2 class Solution(object): 3 deflongestPalindrome(self, s): 4 """ 5 :type s: str 6 :rtype: int 7 """ 8 #"hdfahfodasfh" 9 dic = Counter(s) 10 odd = 1 11 even = 0 12 flag = True 13 return dic.items() 14 for key,val in dic.items(): 15 ifval % 2 == 0: 16 even += val 17 elif val % 2 == 1 and val != 1: 18 odd += val -1 19 flag = False#如果有大於等於3個相同的,則個數為1的不記入 20 elif val == 1 and flag: 21 odd += 1 22 flag = False 23 return9000 24 return odd + even
方法2:
1 from collections import Counter 2 class Solution(object): 3 def longestPalindrome(self, s): 4 """ 5 :type s: str 6 :rtype: int 7 """ 8 #"hdfahfodasfh" 9 lis = [] 10 odd = 1 #假設[5,3,3,2,1]則odd = 5 + 3-1 + 3-1 為了統一成val-1 把初值設為1 11 even = 0 12 flag = True 13 x = set(s) 14 for i in x: 15 lis.append(s.count(i)) 16 lis.sort() 17 lis = lis[::-1] 18 flag2 = False #[4,2,1,1]的情況,如果沒有大於等於3的數,則要把odd初值1減去。 19 for val in lis: 20 if val % 2 == 0: 21 even += val 22 elif val % 2 == 1 and val != 1: 23 odd += val -1 24 flag2 = True 25 flag = False#如果有大於等於3個相同的,則個數為1的不記入 26 elif val == 1 and flag: 27 odd += 1 28 flag = False 29 if not flag2: 30 odd -= 1 31 return odd + even
此方法待優化。
2018-09-30 17:53:50
LeetCode--409--最長回文串