【Leetcode】 最长回文串(每日一题)

题目链接:最长回文串


题意:给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

注意:
假设字符串的长度不会超过 1010。


题解:啊这里看题啊,我还不知道为啥标的简单。。这里是让你构造回文串。

所以我们直接用map统计一下字符个数。偶数个直接相加,奇数个-1再相加。

如果出现有奇数个的字符,标记一下,最后+1。因为回文串只能出现一次奇数个字符嘛。


代码:

 1 class Solution {
 2 public:
 3     int longestPalindrome(string s) {
 4         map<char,int>mp;
 5         int len = s.size();
 6 
 7         for(int i = 0; i < len ;i++){
 8             mp[s[i]]++;
 9         }
10 
11         int cnt = 0;
12         int flag = 0;
13 
14         map<char,int>::iterator iter;
15         for(iter = mp.begin(); iter != mp.end();iter++){
16             if(iter->second % 2){
17                 cnt += iter->second-1;
18                 flag = 1;
19             }
20                 
21             else
22                 cnt += iter->second;
23         }
24 
25         cnt += flag;
26 
27         return cnt;
28     }
29 };

猜你喜欢

转载自www.cnblogs.com/Asumi/p/12527887.html