zoukankan      html  css  js  c++  java
  • 409:最长回文串(C++)

    题目地址https://leetcode-cn.com/problems/longest-palindrome/

    题目描述

    给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

    注意:假设字符串的长度不会超过 1010。

    题目示例

    示例 1:

    输入:
    "abccccdd"
    输出:
    7
    解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

    解题思路

    通过分析题目,我们发现在一个回文串当中,只有最多一个字符出现了奇数次,其余的字符都出现偶数次,可以用哈希表来统计每个字符出现的次数,若字符出现的次数为偶数,则计入累加器之中,此时不存在中心字符center=0。否则,将该字符出现的次数-1(即为偶数,比如ccc,则可以将cc计入累加器,以扩大子串长度)计入累加器,并标记存在中心字符center=1。

    程序源码

    class Solution {
    public:
        int longestPalindrome(string s) {
            unordered_map<char,int> map;
            int res = 0, center = 0;
            for(char c : s)
            {
                map[c]++;
            }
            for(auto i : map)
            {
                if(i.second % 2 == 0) res += i.second;
                else
                {
                    res +=(i.second - 1);
                    center = 1;
                }
            }
            return res + center;
        }
    };
    ----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
  • 相关阅读:
    Codeforces_739_B
    Codeforces_732_D
    D
    C
    E
    商汤AI园区的n个路口(中等)
    D. The Fair Nut and the Best Path
    HDU6446
    分解质因数(线性筛)
    D. Extra Element
  • 原文地址:https://www.cnblogs.com/wzw0625/p/12529409.html
Copyright © 2011-2022 走看看