LeetCode 409 Longest Palindrome

来源:互联网 发布:2017年中国m2数据 编辑:程序博客网 时间:2024/05/21 08:47

题目:

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:7Explanation: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;     }};


原创粉丝点击