409. 最长回文串

题目:最长回文串

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

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

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

示例1:

输入:
"abccccdd"

输出:
7

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

思路

  1. 用一个数组存储每个字母的数量。
  2. 为偶数个的字母可以全部作为回文。
  3. 有奇数个的字母可以使用 n-1(n/2*2)个做为回文。
  4. 可以选择一个奇数长度的的字母作为回文的中心,且只能选择一个。

实现

func longestPalindrome(s string) int {
    chars := [52]int{}
    for _, c := range s {
        if c >= 'a' {
            chars[25+c-'a']++
        } else {
            chars[c-'A']++
        }
    }

    var ans int
    for _, v := range chars {
        if v%2 == 0 {
            ans += v
        } else {
            if ans%2 == 0 {
                ans += v
            } else {
                ans += v / 2 * 2
            }
        }
    }

    return ans
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如...
    不胖二十斤不改名zz阅读 1,209评论 0 0
  • 题目 难度:★☆☆☆☆类型:字符串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。...
    玖月晴阅读 4,680评论 0 0
  • 最长回文串 题目 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请...
    饮酒醉回忆阅读 864评论 0 1
  • 题目描述 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大...
    1只特立独行的猪阅读 968评论 0 0
  • 1,要改变现状,首先要改变自己;要改变自己,先要改变我们对问题的看法。
    小逗逗帅阅读 1,547评论 0 1