LeetCode-409. Longest Palindrome(最长回文串)

最长回文串

LeetCode-409. Longest Palindrome(最长回文串)_第1张图片

Longest Palindrome

LeetCode-409. Longest Palindrome(最长回文串)_第2张图片

  • 若回文串长度为偶数,那么回文串中所有字符出现次数必为偶数
  • 若回文串长度为奇数,那么除中间字母外,其他字母出现次数也为偶数

因此,统计 s s s中各字母出现次数,若为偶数则直接加在 r e t ret ret上,若为奇数,减1后加在 r e t ret ret上。
最后判断回文串长度跟 s s s长度

  • 若相等,则直接返回
  • 若小于,则可以从剩下的字母中任取一个当做中间字母,然后返回
class Solution {
public:
    int longestPalindrome(string s) {
        unordered_map<char, int>ch_map;
        int ret = 0;
        for (char ch : s) {
            ch_map[ch]++;
        }
        for (auto ch : ch_map) {
            if (ch.second & 1) {
                ret += ch.second - 1;
            } else {
                ret +=ch.second;
            }
        }

        return ret < s.size() ? ret + 1 : ret;
    }
};

你可能感兴趣的:(LeetCode)