欢迎来到王正伟的博客

返回顶部

409:最长回文串(C++)

题目地址https://leetcode-cn.com/problems/longest-palindrome/

题目描述

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

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

题目示例

示例 1:

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

解题思路

通过分析题目,我们发现在一个回文串当中,只有最多一个字符出现了奇数次,其余的字符都出现偶数次,可以用哈希表来统计每个字符出现的次数,若字符出现的次数为偶数,则计入累加器之中,此时不存在中心字符center=0。否则,将该字符出现的次数-1(即为偶数,比如ccc,则可以将cc计入累加器,以扩大子串长度)计入累加器,并标记存在中心字符center=1。

程序源码

class Solution {
public:
    int longestPalindrome(string s) {
        unordered_map<char,int> map;
        int res = 0, center = 0;
        for(char c : s)
        {
            map[c]++;
        }
        for(auto i : map)
        {
            if(i.second % 2 == 0) res += i.second;
            else
            {
                res +=(i.second - 1);
                center = 1;
            }
        }
        return res + center;
    }
};
posted @ 2020-03-20 08:04  Mr.King~  阅读(372)  评论(0编辑  收藏  举报