Related Articles
Check whether it is possible to permute string such that it does not contain a palindrome of length 2
• Last Updated : 04 Jan, 2021

Given a strings S length N consisting of only ‘a’, ‘b’ and ‘c’. The task is to check if it is possible to permute the characters of S such that it will not contain a palindrome of length 2 or more as a substring.

Examples:

```Input: S = "abac"
Output: Yes
Explanation :
1. The string contains a palindrome "aba".
2. We can permute the last three characters as follows: S = "acba".
3. Therefore, it does not contain any palindrome of length 2 or more.

Input: S = "aba"
Output: No```

Approach: Follow the below steps to solve the problem:

• Traverse through the string.
• For a palindrome of length 2, both the characters should be same- i.e. “aa” or “bb” or “cc”.
• Similarly, for a palindrome of length 3, same letters are separated by another letter. Example – “a ? a” , “b ? b”.
• Therefore, any two same characters must be separated by at least two characters.
• Find the frequency of characters of the string.
• If the difference of count of :
• “a” and “b” is less than 1
• “b” and “c” is less than 1
• “a” and “c” is less than 1
• If all the three conditions are true, return “Yes”
• Else return “No”.

Below is the implementation of the above approach:

## C++

 `// C++ implementation to print the character and``// its frequency in order of its occurrence``#include ``using` `namespace` `std;` `void` `isPossible(string &str)``{``    ` `    ``//Find the frequency of the characters``    ``//in the string``    ``map<``char``, ``int``> mp;``    ``for``(``auto` `it : str){``        ``mp[it]++;``    ``}``    ` `    ``//Count of characters``    ``int` `x = mp[``'a'``];``    ``int` `y = mp[``'b'``];``    ``int` `z = mp[``'c'``];``    ` `    ``//If satisfies the conditions``    ``if``(``abs``(x-y) <= 1 and ``abs``(y-z) <= 1 and ``abs``(x-z) <= 1){``        ``cout << ``"Yes"` `<< ``"\n"``;``    ``}``    ``//Return No``    ``else``{``        ``cout << ``"No"` `<< ``"\n"``;``    ``}``}` `// Driver program to test above``int` `main()``{``    ``string str = ``"abac"``;``    ` `    ``isPossible(str);``    ` `    ``return` `0;``}`

## Java

 `// Java implementation to print the``// character and its frequency in``// order of its occurrence``import` `java.io.*;``import` `java.util.*;` `class` `GFG{``    ` `public` `static` `void` `isPossible(String str)``{``    ` `    ``// Find the frequency of the characters``    ``// in the string``    ``HashMap mp = ``new` `HashMap();``    ``for``(``int` `i = ``0``; i < str.length(); i++)``    ``{``        ``if` `(mp.containsKey(str.charAt(i)))``        ``{``            ``mp.put(str.charAt(i),``            ``mp.get(str.charAt(i)) + ``1``);``        ``}``        ``else``        ``{``            ``mp.put(str.charAt(i), ``1``);``        ``}``    ``}``    ` `    ``// Count of characters``    ``int` `x = mp.get(``'a'``);``    ``int` `y = mp.get(``'b'``);``    ``int` `z = mp.get(``'c'``);``     ` `    ``// If satisfies the conditions``    ``if` `(Math.abs(x - y)<= ``1` `&&``        ``Math.abs(y - z) <= ``1` `&&``        ``Math.abs(x - z) <= ``1``)``    ``{``        ``System.out.println(``"Yes"``);``    ``}``    ` `    ``// Return No``    ``else``    ``{``        ``System.out.println(``"No"``);``    ``}``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``String str = ``"abac"``;``    ` `    ``isPossible(str);``}``}` `// This code is contributed by rag2127`

## Python3

 `# Python3 implementation to print the character and``# its frequency in order of its occurrence``def` `isPossible(``Str``) :``    ` `    ``# Find the frequency of the characters``    ``# in the string``    ``mp ``=` `{}``    ``for` `it ``in` `Str` `:``        ``if` `it ``in` `mp :``            ``mp[it] ``+``=` `1``        ``else` `:``            ``mp[it] ``=` `1``    ` `    ``# Count of characters``    ``x ``=` `mp[``'a'``]``    ``y ``=` `mp[``'b'``]``    ``z ``=` `mp[``'c'``]``    ` `    ``# If satisfies the conditions``    ``if``(``abs``(x ``-` `y) <``=` `1` `and` `abs``(y ``-` `z) <``=` `1` `and` `abs``(x ``-` `z) <``=` `1``) :``        ``print``(``"Yes"``)``    ` `    ``# Return No``    ``else` `:``        ``print``(``"No"``)` `# Driver code``Str` `=` `"abac"` `isPossible(``Str``)` `# This code is contributed by divyesh072019`

## C#

 `// C# implementation to print the``// character and its frequency in``// order of its occurrence``using` `System;``using` `System.Collections.Generic;` `class` `GFG{``    ` `static` `void` `isPossible(``string` `str)``{``    ` `    ``// Find the frequency of the characters``    ``// in the string``    ``Dictionary<``char``,``               ``int``> mp = ``new` `Dictionary<``char``,``                                        ``int``>();``                                        ` `    ``foreach``(``char` `it ``in` `str)``    ``{``        ``if` `(mp.ContainsKey(it))``        ``{``            ``mp[it]++;``        ``}``        ``else``        ``{``            ``mp[it] = 1;``        ``}``    ``}``    ` `    ``// Count of characters``    ``int` `x = mp[``'a'``];``    ``int` `y = mp[``'b'``];``    ``int` `z = mp[``'c'``];``     ` `    ``// If satisfies the conditions``    ``if` `(Math.Abs(x - y) <= 1 &&``        ``Math.Abs(y - z) <= 1 &&``        ``Math.Abs(x - z) <= 1)``    ``{``        ``Console.WriteLine(``"Yes"``);``    ``}``    ` `    ``// Return No``    ``else``    ``{``        ``Console.WriteLine(``"No"``);``    ``}``}` `// Driver Code``static` `void` `Main()``{``    ``string` `str = ``"abac"``;``    ` `    ``isPossible(str);``}``}` `// This code is contributed by divyeshrabadiya07`

Output:

`Yes`

Time Complexity : O(N), where N is the length of the string

Space Complexity: O(N)

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.

My Personal Notes arrow_drop_up