Very straightforward solution. Count the frequency for characters in the input string. If a character appears even times, it must be a part of palindrome. On the other hand, if a character appears odd times, then we want to add (odd times - 1). In the end, if there is odd time character, the return value should be added one.
1: class Solution {
2: public:
3: int longestPalindrome(string s) {
4: unordered_map<char, int> mp;
5: for (c : s) mp[c]++;
6: int res = 0, odd = 0;
7: for (auto it : mp) {
8: if (it.second & 1) { res += it.second - 1, odd = 1; }
9: else res += it.second;
10: }
11: return res + odd;
12: }
13: };
No comments:
Post a Comment