Given a string s and an integer k, return true if you can use all the characters in s to construct k palindrome strings or false otherwise.
Example 1:
Input: s = "annabelle", k = 2 Output: true Explanation: You can construct two palindromes using all characters in s. Some possible constructions "anna" + "elble", "anbna" + "elle", "anellena" + "b"
Example 2:
Input: s = "leetcode", k = 3 Output: false Explanation: It is impossible to construct 3 palindromes using all the characters of s.
Example 3:
Input: s = "true", k = 4 Output: true Explanation: The only possible solution is to put each character in a separate string.
Constraints:
1 <= s.length <= 105s consists of lowercase English letters.1 <= k <= 105class Solution {
public boolean canConstruct(String s, int k) {
if (k > s.length())
return false;
if (k == s.length())
return true;
int[] freq = new int[26];
for (char c : s.toCharArray())
freq[c - 'a']++;
int odd = 0;
for (int i = 0; i < 26; i++)
if (freq[i] % 2 == 1)
odd++;
return k >= odd;
}
}class Solution {
public boolean canConstruct(String s, int k) {
if (k > s.length())
return false;
if (k == s.length())
return true;
int odd = 0;
for (char c : s.toCharArray())
odd ^= 1 << c - 'a';
return k >= Integer.bitCount(odd);
}
}