leetcode 409.最长回文串

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
"abccccdd"
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
来源:力扣(LeetCode)
链接: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 }

猜你喜欢

转载自www.cnblogs.com/ccllcc/p/12566353.html