题目
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例
输入: “abccccdd”
输出: 7
解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
解答
将字符串转换为列表,再定义一个变量接收去重后的列表,遍历去重后的列表,如果有单个字母,就把singular置为True,否则就将2的倍数增加至res,最后判断singular为True就在结果+1返回,否则直接返回res。
class Solution:
def longestPalindrome(self, s: str) -> int:
res = 0
list_s = list(s)
set_s = set(list_s)
singular = False
for i in set_s:
if list_s.count(i) == 1:
singular = True
else:
if list_s.count(i) % 2 == 0:
res = res + list_s.count(i)
else:
res = res + list_s.count(i) - 1
singular = True
if singular:
return res + 1
return res