给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
“abccccdd”
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
***解题思路:字符串由大小写字母组成,用一个int型数组来存储其中每个字母出现了多少次,回文串性质为只要是双数的字母数都可以组成回文串,所以我们遍历其中所有字母,次数为双数的,将出现个数加到length中,如果是单数就-1再加入length中
代码如下***
```cpp
class Solution {
public:
int longestPalindrome(string s) {
int word[128];//65~90是A~Z,97~122是a~z
int length=0,single=0;
memset(word,0,sizeof(word));
for(int i=0;i<s.length();i++){//记录每一个字母出现的次数
word[s[i]]++;
}
for(int i=65;i<=90;i++){
if(word[i]%2==0){//双数次出现
length=length+word[i];
}
else{//单数次出现
length=length+(word[i]-1);
single++;
}
}
for(int i=97;i<=122;i++){
if(word[i]%2==0){
length=length+word[i];
}
else{
length=length+(word[i]-1);
single++;
}
}
if(single!=0){//有奇数次字母
return length+1;
}
return length;
}
};
```