给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
假设字符串的长度不会超过 1010。
示例 1:
输入:
"abccccdd"
"abccccdd"
输出:
7
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
链接:https://leetcode-cn.com/problems/longest-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
1、哈希字符串统计各个字符的个数;
2、设置一个flag,记录中心点(奇数)的有没有元素;
3、偶数的全部加上,奇数的减去一个后全部加上;
代码:
1 #include"iostream" 2 using namespace std; 3 4 class Solution { 5 public: 6 int longestPalindrome(string s) { 7 int longest=0; 8 int record[128] = { 0 }; 9 int flag = 0; 10 for (int i = 0; i < s.size(); i++) { 11 record[s[i]]++; 12 } 13 for (int i = 0; i < 128; i++) { 14 if (record[i] % 2 == 0) { 15 longest += record[i]; 16 } 17 else if (flag == 0) { 18 longest = longest + record[i]; 19 flag = 1; 20 } 21 else 22 { 23 longest = longest + record[i] - 1; 24 } 25 } 26 return longest+1; 27 } 28 }; 29 30 31 //测试 32 int main() 33 { 34 string s = "abccccdd"; 35 Solution s1; 36 int n=s1.longestPalindrome(s); 37 cout << "字符串:" << s << "的最长回文数为:" << n << endl; 38 system("pause"); 39 }