題目描述
給定一個包含大寫字母和小寫字母的字符串,找到通過這些字母構造成的最長的迴文串。在構造過程中,請注意區分大小寫。比如 "Aa"
不能當做一個迴文字符串。
輸入: "abccccdd"
輸出: 7
解釋: 我們可以構造的最長的迴文串是"dccaccd", 它的長度是 7。
解題思路
迴文子串問題一般是用“動態規劃”或者“中心拓展法”解決,但是這個題有點區別:本題不需要考慮原來字符串中字符的順序,僅需要找到通過這些字符構造成的最長的迴文串長度。所以本題應該考慮統計各個字符出現的次數,用“哈希表”解決。
參考代碼
class Solution {
public:
int longestPalindrome(string str) {
unordered_map<char, int> umap;
for(auto &c: str){
umap[c]++;
}
int res = 0;
bool flag = false;
for(auto &elem: umap){
res += (elem.second / 2 * 2);
if(elem.second & 1) // 有奇數個數的字符時,需要特殊處理一下
flag = true;
}
return flag? res + 1: res;
}
};