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;
    }
};

猜你喜欢

转载自www.cnblogs.com/wzw0625/p/12529409.html
今日推荐