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 516. Longest Palindromic Subsequence
找到一个字符串的最长回文子序列,这里注意回文子串和回文序列的区别。子序列不要求连续,子串(substring)是要求连续的。leetcode 5. Longest Palindromic Substring就是求连续子串的。
49 0
Palindromes(判断回文串)
Palindromes(判断回文串)
50 0
|
算法
poj 1159 Palindrome(最长公共子串)
关于求最长公共子串, 用到的是动态规划
35 0
LeetCode 409. Longest Palindrome
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
74 0
LeetCode 409. Longest Palindrome
HDU 4632 Palindrome subsequence(动态规划)
HDU 4632 Palindrome subsequence(动态规划)
75 0
HDU 4632 Palindrome subsequence(动态规划)