<p>Given a string <code>s</code> which consists of lowercase or uppercase letters, return the length of the <strong>longest <span data-keyword="palindrome-string">palindrome</span></strong>&nbsp;that can be built with those letters.</p>

<p>Letters are <strong>case sensitive</strong>, for example, <code>&quot;Aa&quot;</code> is not considered a palindrome.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;abccccdd&quot;
<strong>Output:</strong> 7
<strong>Explanation:</strong> One longest palindrome that can be built is &quot;dccaccd&quot;, whose length is 7.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;a&quot;
<strong>Output:</strong> 1
<strong>Explanation:</strong> The longest palindrome that can be built is &quot;a&quot;, whose length is 1.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= s.length &lt;= 2000</code></li>
	<li><code>s</code> consists of lowercase <strong>and/or</strong> uppercase English&nbsp;letters only.</li>
</ul>

class Solution {
public:
    int longestPalindrome(string s) {
        unordered_map<char, int> freqMap;
        int length = 0;
        bool oddCountFound = false;
        
        // Count the frequency of each character
        for (char c : s) {
            freqMap[c]++;
        }
        
        // Calculate the length of the longest palindrome
        for (const auto& entry : freqMap) {
            if (entry.second % 2 == 0) {
                length += entry.second;  // Add even counts directly
            } else {
                length += entry.second - 1;  // Add largest even part of odd counts
                oddCountFound = true;  // Mark that we found an odd count
            }
        }
        
        // If there was at least one odd count, add 1 for the center character
        if (oddCountFound) {
            length += 1;
        }
        
        return length;
    }
};
9500