LeetCode 409. Longest Palindrome 解题报告

LeetCode 409. Longest Palindrome 解题报告

题目描述

Given a string which consists of lowercase or uppercase letters, find the length of the longest palindromes that can be built with those letters.

This is case sensitive, for example “Aa” is not considered a palindrome here.

Assume the length of given string will not exceed 1,010.


示例

LeetCode 409. Longest Palindrome 解题报告_第1张图片


限制条件

没有明确给出。


解题思路

我的思路:

题目的意思就是给出一个字符串,返回使用该字符串中字符组成的最长回文字符串的长度。
我的思路就是扫描一遍给出的字符串,统计每个字符出现的个数。然后遍历一遍各个字符的个数,如果个数是偶数,则直接添加到长度中;如果个数是奇数,则添加个数-1到长度中并且标记存在中心字符,因为只有偶数个字符才能分配到回文字符串的两端,而中心可以是单个字符,最后直接返回长度即可。


代码

我的代码

class Solution {
public:
    int longestPalindrome(string s) {
        int letters[52] = {0};
        int plength = 0;
        int hasCenter = 0;

        for (auto c: s) 
            isupper(c) ? letters[c - 'A' + 26]++ : letters[c - 'a']++;

        for (int i = 0; i < 52; i++) {
            if (letters[i] % 2) {
                plength += letters[i] - 1;
                hasCenter = 1;
            } else {
                plength += letters[i];
            }
        }

        return plength + hasCenter;
    }
};

总结

这道题不难,比较容易出错的是,当字符的个数是奇数个时,该字符也可以组成回文字符串的一部分,只要剔除一个字符即可。一开始做的时候,我就误以为只有偶数个的字符才能组成回文字符串导致得到长度小于标准长度。
接下来还会发几篇解题报告的,玩过就得勤奋了,继续填坑,加油加油!

你可能感兴趣的:(编程解题)