# Leetcode Longest-Palindrome 2022-09-05 17:27 > ##### Algorithms: > > #algorithm #greedy > > ##### Data structures: > > #DS #string > > ##### Difficulty: > > #coding_problem #difficulty-easy > > ##### Additional tags: > > #leetcode > > ##### Revisions: > > N/A ##### Links: - [Link to problem](https://leetcode.com/problems/longest-palindrome/) --- ### Problem Given a string `s` which consists of lowercase or uppercase letters, return _the length of the **longest palindrome**_ that can be built with those letters. Letters are **case sensitive**, for example, `"Aa"` is not considered a palindrome here. #### Examples **Example 1:** **Input:** s = "abccccdd" **Output:** 7 **Explanation:** One longest palindrome that can be built is "dccaccd", whose length is 7. **Example 2:** **Input:** s = "a" **Output:** 1 **Explanation:** The longest palindrome that can be built is "a", whose length is 1. #### Constraints - `1 <= s.length <= 2000` - `s` consists of lowercase **and/or** uppercase English letters only. ### Thoughts > [!summary] > This is a #greedy problem. The solution is simple: count the apperances, sort it using std::greater(), and select all even number, for odd number `i`: - if odd numbers has been used: `ans += i - 1` (make it even) - if not: `ans += i`, and mark odd number used ### Solution ```cpp class Solution { public: int longestPalindrome(string s) { int ans = 0; bool used = false; vector table(52, 0); // record in table. for (char ch : s) { if (ch <= 'Z') { table[ch - 'A' + 26]++; } else { table[ch - 'a']++; } } sort(table.begin(), table.end(), greater()); for (int i : table) { if (i % 2 == 1) { if (used == false) { used = true; ans += i; } else { ans += i - 1; } } else { if (i == 0) { break; } ans += i; } } return ans; } }; ```