409. 最长回文串

一、题目

给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。

在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。

二、思路

遍历一次 hash 数组,统计奇数的个数,然后做一次减法即可。

三、代码

class Solution {
public:
    int longestPalindrome(string s) {
        int hashCount[52] = {0};
        for(string::size_type i = 0; i < s.size(); i++) {
            if('a' <= s[i] && s[i] <= 'z') {
                hashCount[s[i]-'a']++;
            } else {
                hashCount[s[i]-'A'+26]++;
            }
        }
        int sum = 0;
        for(int i = 0; i < 52; i++) {
            if((sum&1) && (hashCount[i]&1)) {
                sum += hashCount[i]-1;
            } else {
                sum += hashCount[i];
            }
        }
        return sum;
    }
};
posted @ 2022-12-31 19:02  ImreW  阅读(19)  评论(0)    收藏  举报