Minimum number of palindromic subsequences to be removed to empty a binary string

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.
- If given string is palindrome, we need only one removal.
- 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.
Implementation:
C++
// C++ program to count minimum palindromic subsequences// to be removed to make an string empty.#include <bits/stdc++.h>using namespace std;// A function to check if a string str is palindromebool 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 subsequences to// be removed to make string emptyint minRemovals(const char *str){ // If string is empty if (str[0] == '\0') return 0; // If string is palindrome if (isPalindrome(str)) return 1; // If string is not palindrome return 2;}// Driver code to test aboveint 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 palindromestatic 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 // subsequences to be removed to// make string emptystatic 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 abovepublic 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 palindromedef 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 subsequences to# be removed to make string# emptydef 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 // subsequences to be removed to // make string empty static int minRemovals(String 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 to public static void Main () { Console.WriteLine(minRemovals("010010")); Console.WriteLine(minRemovals("0100101")); } }// This code is contributed by Sam007 |
PHP
<?php// PHP program to count minimum // palindromic subsequences to // be removed to make an string empty.// A function to check if a // string str is palindromefunction isPalindrome($str){ // Start from leftmost and // rightmost corners of str $l = 0; $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 subsequences // to be removed to make// string emptyfunction minRemovals($str){// If string is emptyif ($str[0] == '') return 0;// If string is palindromeif (isPalindrome($str)) return 1;// If string is not palindromereturn 2;}// Driver Codeecho minRemovals("010010"), "\n";echo minRemovals("0100101") , "\n";// This code is contributed by ajit?> |
Javascript
<script> // Javascript program to count // minimum palindromic // subsequences to be removed to make // an string empty. // A function to check if a // string str is palindrome function isPalindrome(str) { // Start from leftmost and // rightmost corners of str let l = 0; let 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 // subsequences to be removed to // make string empty function 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 document.write(minRemovals("010010") + "</br>"); document.write(minRemovals("0100101")); </script> |
Output
1 2
Time Complexity: O(n)
Auxiliary Space : O(1)
Exercises:
- Extend the above solution to count minimum number of subsequences to be removed to make it an empty string.
- 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.
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



