1. 程式人生 > >LeetCode--409--最長回文串

LeetCode--409--最長回文串

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     def
longestPalindrome(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 if
val % 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 return
9000 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--最長回文串