409. 最长回文串 Longest Palindrome

简介: 409. 最长回文串 Longest Palindrome

409. 最长回文串 Longest Palindrome


Table of Contents

一、中文版

二、英文版

三、My answer

四、解题报告


一、中文版

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

注意:

假设字符串的长度不会超过 1010。

示例 1:

输入:

"abccccdd"

输出:

7

解释:

我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。


二、英文版

Given a string which consists of lowercase or uppercase letters, find the length of the longest palindromes that can be built with those letters.
This is case sensitive, for example "Aa" is not considered a palindrome here.
Note:
Assume the length of given string will not exceed 1,010.
Example:
Input:
"abccccdd"
Output:
7
Explanation:
One longest palindrome that can be built is "dccaccd", whose length is 7.


三、My answer

class Solution:
    def longestPalindrome(self, s: str) -> int:
        if not s:
            return 0
        flag, res = 0, 0
        counter = collections.Counter(s)
        for key in counter:
            if counter[key] % 2 == 0:
                res += counter[key]
            else:
                flag = 1
                res += counter[key]-1
        return res if flag == 0 else res + 1


四、解题报告

使用 collections.Counter() 生成类似字典的结构,存储字符串中字母出现的个数。

如果是偶数个直接放入 res 结果中;如果是奇数个,先把 奇数-1 存入结果,再利用 flag 标志位,如果 flag = 1 证明有奇数,再加上这个奇数位于中间位置。

注意不能直接加上最长的奇数位,特殊情况:abbbccc,则结果是 cbbbc,直接加上最长的奇数,会漏掉可以加上 cc 的情况,造成错误。

相关文章
LeetCode 409. Longest Palindrome
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
93 0
LeetCode 409. Longest Palindrome
LeetCode之Palindrome Number(回文数)
LeetCode之Palindrome Number(回文数)
74 0
|
存储 Java 索引
LeetCode 3: 无重复字符的最长子串 Longest Substring Without Repeating Characters
题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 Given a string, find the length of the longest substring without repeating characters. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
1008 0