问题描述:
样例:
解题思路:
计算每个单词出现的数目,最长即为所有偶数的和加一个奇数再加上剩余的每个的奇数减一。
代码:
给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。
数据是大小写敏感的,也就是说,"Aa"
并不会被认为是一个回文串。
样例:
给出 s = "abccccdd"
返回 7
一种可以构建出来的最长回文串方案是 "dccaccd"
。
解题思路:
计算每个单词出现的数目,最长即为所有偶数的和加一个奇数再加上剩余的每个的奇数减一。
代码:
class Solution {
public:
/**
* @param s a string which consists of lowercase or uppercase letters
* @return the length of the longest palindromes that can be built
*/
int longestPalindrome(string& s) {
// Write your code here
sort(s.begin(),s.end());
vector<int> a;int k=0;
if(s.size()==1)return 1;
for(int i=0;i<s.size();i++) {
if(i==0){k++;continue;}
if(i>0) {if(s[i]==s[i-1]){k++;}
else{a.push_back(k);k=1;}}
if(i==s.size()-1)a.push_back(k);
}
int b=0,c=0;
for(int i=0;i<a.size();i++) {
if(!(a[i]%2)) {b=b+a[i];}
if(a[i]%2) {
if(c==1){ b=b+a[i]-1;}
if(c==0){b=b+a[i];c=1;}
}
}
return b;
}
};
感想:
重点再找如何构造最长回文串。