给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。
在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。
示例 1:
输入:s = "abccccdd"
输出:7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
示例 2:
输入:s = "a"
输出:1
示例 3:
输入:s = "aaaaaccc"
输出:7
提示:
1 <= s.length <= 2000
s 只由小写 和/或 大写英文字母组成
解题思路:
新建nums数组,将字符串s中每个字母出现的次数存入数组中,遍历nums数组,如果数组中的元素为偶数,可以组成回文串,如果数组中的元素是的大于二的奇数,组成回文串的个数为nums[i]-1,累加即可
代码:
class Solution {
public:
int longestPalindrome(string s) {
if(s.size() == 1) return 1;
int k = 0,flag = 0;
vector<int> nums(2002,0);
for(int i=0;i<s.size();i++){
nums[s[i]-'A']++;
}
for(int i=0;i<2002;i++){
if(nums[i] % 2 == 0) {
k+=nums[i];
}
else {
flag = 1;
if(nums[i]>2)
k += (nums[i]-1);
}
}
if(flag == 1) k++;
return k;
}
};