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 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 subsequences to // be removed to make string empty int 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 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 // subsequences 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 subsequences 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
// 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 palindrome function 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 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 echo 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.