Skip to content
Related Articles
Minimum number of palindromic subsequences to be removed to empty a binary string
• Difficulty Level : Easy
• Last Updated : 20 Apr, 2021

Given a binary string, count minimum number of subsequences to be removed to make it an empty string.
Examples :

```Input: str[] = "10001"
Output: 1
Since the whole string is palindrome,
we need only one removal.

Input: str[] = "10001001"
Output: 2
We can remove the middle 1 as first
removal, after first removal string
becomes 1000001 which is a palindrome.```

Expected time complexity : O(n)

## We strongly recommend that you click here and practice it, before moving on to the solution.

The problem is simple and can be solved easily using below two facts.
1) If given string is palindrome, we need only one removal.
2) Else we need two removals. Note that every binary string has all 1’s as a subsequence and all 0’s as another subsequence. We can remove any of the two subsequences to get a unary string. A unary string is always palindrome.

## C++

 `// C++ program to count minimum palindromic subsequences``// to be removed to make an string empty.``#include ``using` `namespace` `std;` `// A function to check if a string str is palindrome``bool` `isPalindrome(``const` `char` `*str)``{``    ``// Start from leftmost and rightmost corners of str``    ``int` `l = 0;``    ``int` `h = ``strlen``(str) - 1;` `    ``// Keep comparing characters while they are same``    ``while` `(h > l)``        ``if` `(str[l++] != str[h--])``            ``return` `false``;` `    ``return` `true``;``}` `// Returns count of minimum palindromic subseuqnces to``// be removed to make string empty``int` `minRemovals(``const` `char` `*str)``{``   ``// If string is empty``   ``if` `(str == ``''``)``      ``return` `0;` `   ``// If string is palindrome``   ``if` `(isPalindrome(str))``      ``return` `1;` `   ``// If string is not palindrome``   ``return` `2;``}` `// Driver code to test above``int` `main()``{``   ``cout << minRemovals(``"010010"``) << endl;``   ``cout << minRemovals(``"0100101"``) << endl;``   ``return` `0;``}`

## Java

 `// Java program to count minimum palindromic``// subsequences to be removed to make``// an string empty.``import` `java.io.*;` `class` `GFG {``    ` `// A function to check if a string``// str is palindrome``static` `boolean` `isPalindrome(String str)``{``    ``// Start from leftmost and rightmost``    ``// corners of str``    ``int` `l = ``0``;``    ``int` `h = str.length() - ``1``;` `    ``// Keep comparing characters``    ``// while they are same``    ``while` `(h > l)``        ``if` `(str.charAt(l++) != str.charAt(h--))``            ``return` `false``;` `    ``return` `true``;``}` `// Returns count of minimum palindromic``// subseuqnces to be removed to``// make string empty``static` `int` `minRemovals(String str)``{``    ``// If string is empty``    ``if` `(str.charAt(``0``) == ``''``)``        ``return` `0``;` `    ``// If string is palindrome``    ``if` `(isPalindrome(str))``        ``return` `1``;` `    ``// If string is not palindrome``    ``return` `2``;``}` `// Driver code to test above``public` `static` `void` `main (String[] args)``{``    ``System.out.println (minRemovals(``"010010"``));``    ``System.out.println (minRemovals(``"0100101"``));``        ` `}``}` `// This code is contributed by vt_m.`

## Python3

 `# Python program to count minimum``# palindromic subsequences to``# be removed to make an string``# empty.` `# A function to check if a``# string str is palindrome``def` `isPalindrome(``str``):``    ` `    ``# Start from leftmost and``    ``# rightmost corners of str``    ``l ``=` `0``    ``h ``=` `len``(``str``) ``-` `1``    ` `    ``# Keep comparing characters``    ``# while they are same``    ``while` `(h > l):``        ``if` `(``str``[l] !``=` `str``[h]):``            ``return` `0``        ``l ``=` `l ``+` `1``        ``h ``=` `h ``-` `1``        ` `    ``return` `1``    ` `# Returns count of minimum``# palindromic subseuqnces to``# be removed to make string``# empty``def` `minRemovals(``str``):``    ` `    ``#If string is empty``    ``if` `(``str``[``0``] ``=``=` `''):``        ``return` `0``    ` `    ``#If string is palindrome``    ``if` `(isPalindrome(``str``)):``        ``return` `1``    ` `    ``# If string is not palindrome``    ``return` `2``    ` `# Driver code``print``(minRemovals(``"010010"``))``print``(minRemovals(``"0100101"``))` `# This code is contributed by Sam007.`

## C#

 `// C# program to count minimum palindromic``// subsequences to be removed to make``// an string empty.``using` `System;` `class` `GFG``{``    ` `    ``// A function to check if a``    ``// string str is palindrome``    ``static` `bool` `isPalindrome(String str)``    ``{``        ``// Start from leftmost and``        ``// rightmost corners of str``        ``int` `l = 0;``        ``int` `h = str.Length - 1;``    ` `        ``// Keep comparing characters``        ``// while they are same``        ``while` `(h > l)``            ``if` `(str[l++] != str[h--])``                ``return` `false``;``    ` `        ``return` `true``;``    ``}``    ` `    ``// Returns count of minimum palindromic``    ``// subseuqnces to be removed to``    ``// make string empty``    ``static` `int` `minRemovals(String str)``    ``{``        ``// If string is empty``        ``if` `(str == ``''``)``            ``return` `0;``    ` `        ``// If string is palindrome``        ``if` `(isPalindrome(str))``            ``return` `1;``    ` `        ``// If string is not palindrome``        ``return` `2;``    ``}``    ` `    ``// Driver code to``    ``public` `static` `void` `Main ()``    ``{``        ``Console.WriteLine(minRemovals(``"010010"``));``        ``Console.WriteLine(minRemovals(``"0100101"``));``            ` `    ``}``    ` `}` `// This code is contributed by Sam007`

## PHP

 ` ``\$l``)``        ``if` `(``\$str``[``\$l``++] != ``\$str``[``\$h``--])``            ``return` `false;` `    ``return` `true;``}` `// Returns count of minimum``// palindromic subsequences``// to be removed to make``// string empty``function` `minRemovals(``\$str``)``{``// If string is empty``if` `(``\$str`` == ``''``)``    ``return` `0;` `// If string is palindrome``if` `(isPalindrome(``\$str``))``    ``return` `1;` `// If string is not palindrome``return` `2;``}` `// Driver Code``echo` `minRemovals(``"010010"``), ``"\n"``;``echo` `minRemovals(``"0100101"``) , ``"\n"``;` `// This code is contributed by ajit``?>`

## Javascript

 ``

Output :

```1
2```

Exercises:

1. Extend the above solution to count minimum number of subsequences to be removed to make it an empty string.
2. What is the maximum count for ternary strings

This problem and solution are contributed by Hardik Gulati. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up