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.
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.
Solution (Java)
class Solution {
public int longestPalindrome(String s) {
BitSet set = new BitSet(60);
for (char c : s.toCharArray()) {
set.flip(c - 'A');
}
if (set.isEmpty()) {
return s.length();
}
return s.length() - set.cardinality() + 1;
}
}
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).