LeetCode——最长回文串
题目描述:
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
“abccccdd”
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
我们用一个键值对来存储s中的每一个字符,及不同字符出现的次数。
然后我们用一个参数 j 来记录是否有出现次数为奇数的字符。用length记录能形成的最长回文串的长度。
我们遍历每一个字符的出现次数,如果该字符出现次数为偶数,则可以直接拿出所有该字符,即length += value;如果该字符出现次数为偶数,则可以拿出该字符出现次数 - 1个,即length += value - 1,并且让 j 等于1。
最后我们要让length += j,因为出现一次的字符可以放在最长回文串的中间。(如ccc)
python代码:
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: int
"""
dic = {}
for c in s:
if c in dic:
dic[c] += 1
else:
dic[c] = 1
j = 0
length = 0
for value in dic.values():
if value % 2 == 0:
length += value
else:
j = 1
length += value - 1
length += j
return length