# Find if string is K-Palindrome or not using all characters exactly once

Given a string str and an integer K, the task is to check if it is possible to make the string K palindromes using all the characters of the string exactly once.
Examples:

Input: str = “poor”, K = 3
Output: Yes
One way of getting 3 palindromes is: oo, p, r

Input: str = “fun”, K = 5
Output: No
2 palindromes can’t be constructed using 3 distinct letters. Hence not possible.

Approach:

1. If the size of the string is less than k, getting k palindromes is not possible.
2. If the size of the string is equal to k, getting k palindromes is always possible. We give 1 character to each of k strings and all of them are palindromes as a string of length 1 is always a palindrome.
3. If the size of the string is greater than k then some strings might have more than 1 character.
• Create a hashmap to store the frequency of every character as the characters having even number of occurrences can be distributed in groups of 2.
• Check if the number of characters having an odd number of occurrences is less than or equal to k, we can say that k palindromes can always be generated else no.

Below is the implementation of the above approach:

## C++

 `// C++ program to find if string is K-Palindrome ` `// or not using all characters exactly once ` ` `  `#include ` `using` `namespace` `std; ` ` `  `void` `iskPalindromesPossible(string s, ``int` `k) ` `{ ` `    ``// when size of string is less than k ` `    ``if` `(s.size() < k) { ` `        ``cout << ``"Not Possible"` `<< endl; ` `        ``return``; ` `    ``} ` ` `  `    ``// when size of string is equal to k ` `    ``if` `(s.size() == k) { ` `        ``cout << ``"Possible"` `<< endl; ` `        ``return``; ` `    ``} ` ` `  `    ``// when size of string is greater than k ` ` `  `    ``// to store the frequencies of the characters ` `    ``map<``char``, ``int``> freq; ` `    ``for` `(``int` `i = 0; i < s.size(); i++) ` `        ``freq[s[i]]++; ` ` `  `    ``// to store the count of characters ` `    ``// whose number of occurrences is odd. ` `    ``int` `count = 0; ` ` `  `    ``// iterating over the map ` `    ``for` `(``auto` `it : freq) { ` `        ``if` `(it.second % 2 == 1) ` `            ``count++; ` `    ``} ` `    ``if` `(count > k) ` `        ``cout << ``"No"` `<< endl; ` `    ``else` `        ``cout << ``"Yes"` `<< endl; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` ` `  `    ``string str = ``"poor"``; ` `    ``int` `K = 3; ` `    ``iskPalindromesPossible(str, K); ` ` `  `    ``str = ``"geeksforgeeks"``; ` `    ``K = 10; ` `    ``iskPalindromesPossible(str, K); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to find if String ` `// is K-Palindrome or not using  ` `// all characters exactly once ` `import` `java.util.*; ` ` `  `class` `GFG{ ` ` `  `static` `void` `iskPalindromesPossible(String s, ` `                                   ``int` `k) ` `{ ` `     `  `    ``// When size of String is less than k ` `    ``if` `(s.length() < k) ` `    ``{ ` `        ``System.out.print(``"Not Possible"` `+ ``"\n"``); ` `        ``return``; ` `    ``} ` ` `  `    ``// When size of String is equal to k ` `    ``if` `(s.length() == k) ` `    ``{ ` `        ``System.out.print(``"Possible"` `+ ``"\n"``); ` `        ``return``; ` `    ``} ` `     `  `    ``// When size of String is greater than k ` `    ``// to store the frequencies of the characters ` `    ``HashMap freq = ``new` `HashMap(); ` `    ``for``(``int` `i = ``0``; i < s.length(); i++) ` `       ``if``(freq.containsKey(s.charAt(i))) ` `       ``{ ` `           ``freq.put(s.charAt(i),  ` `           ``freq.get(s.charAt(i)) + ``1``); ` `       ``} ` `       ``else` `       ``{ ` `           ``freq.put(s.charAt(i), ``1``); ` `       ``} ` ` `  `    ``// To store the count of characters ` `    ``// whose number of occurrences is odd. ` `    ``int` `count = ``0``; ` ` `  `    ``// Iterating over the map ` `    ``for``(Map.Entry it : freq.entrySet())  ` `    ``{ ` `       ``if` `(it.getValue() % ``2` `== ``1``) ` `           ``count++; ` `    ``} ` `     `  `    ``if` `(count > k) ` `        ``System.out.print(``"No"` `+ ``"\n"``); ` `    ``else` `        ``System.out.print(``"Yes"` `+ ``"\n"``); ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``String str = ``"poor"``; ` `    ``int` `K = ``3``; ` `    ``iskPalindromesPossible(str, K); ` ` `  `    ``str = ``"geeksforgeeks"``; ` `    ``K = ``10``; ` `    ``iskPalindromesPossible(str, K); ` `} ` `} ` ` `  `// This code is contributed by sapnasingh4991 `

## Python3

 `# Find if string is K-Palindrome or not using all characters exactly once ` `# Python 3 program to find if string is K-Palindrome ` `# or not using all characters exactly once ` ` `  `def` `iskPalindromesPossible(s, k): ` ` `  `    ``# when size of string is less than k ` `    ``if` `(``len``(s) k): ` `        ``print``(``"No"``) ` `    ``else``: ` `        ``print``(``"Yes"``) ` ` `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``str1 ``=` `"poor"` `    ``K ``=` `3` `    ``iskPalindromesPossible(str1, K) ` ` `  `    ``str` `=` `"geeksforgeeks"` `    ``K ``=` `10` `    ``iskPalindromesPossible(``str``, K) ` ` `  `# This code is contributed by Surendra_Gangwar `

## C#

 `// C# program to find if String ` `// is K-Palindrome or not using  ` `// all characters exactly once ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `class` `GFG{ ` ` `  `static` `void` `iskPalindromesPossible(String s, ` `                                   ``int` `k) ` `{ ` `     `  `    ``// When size of String is less than k ` `    ``if` `(s.Length < k) ` `    ``{ ` `        ``Console.Write(``"Not Possible"` `+ ``"\n"``); ` `        ``return``; ` `    ``} ` ` `  `    ``// When size of String is equal to k ` `    ``if` `(s.Length == k) ` `    ``{ ` `        ``Console.Write(``"Possible"` `+ ``"\n"``); ` `        ``return``; ` `    ``} ` `     `  `    ``// When size of String is greater than k ` `    ``// to store the frequencies of the characters ` `    ``Dictionary<``int``,  ` `               ``int``> freq = ``new` `Dictionary<``int``, ` `                                          ``int``>(); ` `    ``for``(``int` `i = 0; i < s.Length; i++) ` `        ``if``(freq.ContainsKey(s[i])) ` `        ``{ ` `            ``freq[s[i]] = freq[s[i]] + 1; ` `        ``} ` `        ``else` `        ``{ ` `            ``freq.Add(s[i], 1); ` `        ``} ` ` `  `    ``// To store the count of characters ` `    ``// whose number of occurrences is odd. ` `    ``int` `count = 0; ` ` `  `    ``// Iterating over the map ` `    ``foreach``(KeyValuePair<``int``, ``int``> it ``in` `freq)  ` `    ``{ ` `        ``if` `(it.Value % 2 == 1) ` `            ``count++; ` `    ``} ` `     `  `    ``if` `(count > k) ` `        ``Console.Write(``"No"` `+ ``"\n"``); ` `    ``else` `        ``Console.Write(``"Yes"` `+ ``"\n"``); ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``String str = ``"poor"``; ` `    ``int` `K = 3; ` `    ``iskPalindromesPossible(str, K); ` ` `  `    ``str = ``"geeksforgeeks"``; ` `    ``K = 10; ` `    ``iskPalindromesPossible(str, K); ` `} ` `} ` ` `  `// This code is contributed by Princi Singh `

Output:

```Yes
Yes
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.