给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa"
不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入: "abccccdd" 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
class Solution { public: int longestPalindrome(string s) { int alphabet[52]={0}; int res = 0; int cnt = 0; for(int i = 0; i < s.size(); i++){ if(‘a‘ <= s[i] && s[i] <= ‘z‘) alphabet[s[i]-‘A‘-6] += 1; else alphabet[s[i]-‘A‘] += 1; } for(int i = 0; i < 52; i++){ res += alphabet[i]/2*2; if(alphabet[i]%2 != 0 && res%2 == 0) res += 1; } return res; } };
解题思路:
1.统计每个字符的个数
2.使用每个字符的偶数次去构建回文串
3.遇到有奇数个数的字符的时候,回文串长度+1,并且以后遇到奇数个数的字符的时候不再+1
原文:https://www.cnblogs.com/olajennings/p/12521680.html