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; } };
-----------------------------------
心之所向,素履所往;生如逆旅,一苇以航。
------------------------------------------