409. Longest Palindrome

来源:互联网 发布:fm自建球员数据锁定 编辑:程序博客网 时间:2024/06/08 08:54

Problem:


Solution:

对于给定的字符串,找出由该字符串中所给字母组成的最长的回文串的长度。首先,统计各字符出现的次数,使用一个长度为'z'-'A'+1的数组即可,然后遍历整个数组,对于偶数个数的字符直接加以来,对于最多的奇数个数的字符直接加(构造回文串时放在中间),对于其余的奇数个数的字符先减1变为偶数个数再相加。
class Solution {public:    int longestPalindrome(string s) {        int len = s.size();        int size = 'z' - 'A' + 1;        int ss[size] = {0};        int count = 0;        bool flag = false;        int max = 0;        for (int i = 0;i < len;i++)        {            ss[s[i] - 'A']++;        }        for (int i = 0;i < size;i++)        {            if (ss[i]%2 == 0 && ss[i] != 0) count += ss[i];            else if (ss[i]%2 != 0)            {                if (max == 0) max++;                if (ss[i] > max)                {                    count += max-1;                    max = ss[i];                }                else count += ss[i]-1;            }        }        return count += max;    }};


0 0
原创粉丝点击