标签:end 思路 过程 字符串 示例 ges das ali 注意
问题描述:
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "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
标签:end 思路 过程 字符串 示例 ges das ali 注意
原文地址:https://www.cnblogs.com/NPC-assange/p/9732933.html