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.


示例

Example


限制条件

没有明确给出。


解题思路

我的思路:

题目的意思就是给出一个字符串,返回使用该字符串中字符组成的最长回文字符串的长度。
我的思路就是扫描一遍给出的字符串,统计每个字符出现的个数。然后遍历一遍各个字符的个数,如果个数是偶数,则直接添加到长度中;如果个数是奇数,则添加个数-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;
    }
};

总结

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值