题目描述:
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如"Aa"不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:“abccccdd”
输出:7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
知识点:
思路和代码:
def longestPalindrome(s):
hash_dict = dict() #记录每种字符的频数
hash_list = [] #用于遍历哈希表中记录的字符
max_length=0 # 最大长度
flag=0 # 是否有出现奇次的字符
for c in s:
if c in hash_dict:
hash_dict[c]+=1
else:
hash_dict[c]=1
hash_list.append(c)
for c in hash_list:
if hash_dict[c]%2==0: # 偶数次的直接累加
max_length+=hash_dict[c]
else: #奇数次的累加减一
max_length+=(hash_dict[c]-1)
flag = 1
if flag: # 出现奇数次的,则加一
return max_length+1
else:
return max_length