题目:
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
"abccccdd"
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
代码:
class Solution:
def longestPalindrome(self, s: str) -> int:
set_s = set()
list_s = list(s)
maxLength = 0
single = 0
for i in list_s:
if i not in set_s:
set_s.add(i)
if list_s.count(i) % 2 == 1:
maxLength += list_s.count(i) - 1
single = 1
elif list_s.count(i) % 2 == 0:
maxLength += list_s.count(i)
return maxLength + single
说明:
应该算是比较常规的解法,初始化set用于减少重复计算,并将s转换为list主要是使用count方法。循环列表,如果值不在set中表示该值未参加过计算,将其加入集合,判断值出现的次数,将偶数次的数量不断计入最大长度,并且某个元素出现过奇数次,则回文串中可以加入一个奇数元素,总长度+1,最后返回maxLength + single