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

• Difficulty Level : Medium
• Last Updated : 05 May, 2022

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`

## Javascript

 ``
Output:
```Yes
Yes```

My Personal Notes arrow_drop_up