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.

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

Example:

Input:
"abccccdd"

Output:
7

Explanation:
One longest palindrome that can be built is "dccaccd", whose length is 7.
题目链接

题意:

给一个字符串,由大写字母和小写字母组成,找到可组成的最长回文串的长度,并将长度返回,在本题中,区分大小写,且所给字符串的长度不超过1010。

原本是搜索或枚举题,加上“可组成”后,变成了思路题,所有字母的顺序可变,也就是说假如单个字母的个数是偶数,那么一定可以全部用上,假如是奇数,那么整个字符串只能用一个奇数,那就是在最中间的位置,所以可以先进行统计,之后把所有字母的数量向下取偶在求和,与所有字符的总数进行比较,假如相同,说明该字符串所有字母的个数都是偶数,都可以用得到,假如不相同,说明存在有字母个数为奇数的情况,这种情况下可组成长度最大的情况为ABA型,只能允许有单个奇数存在,所以为之前统计的向下取偶的和加1。

代码

class Solution {
public:
    int longestPalindrome(string s) {
        int ans = 0, dic[200];
        memset(dic, 0, sizeof dic);
        for (char c : s) 
            dic[c] ++;
        for (int i = 0; i < 200; i++) {
            ans += dic[i] / 2;
        }
        return ans*2 == s.length() ? s.length() : ans * 2 + 1; 
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值