Check if given Binary String can be made Palindrome using K flips
Given a binary string str, the task is to determine if string str can be converted into a palindrome in K moves. In one move any one bit can be flipped i.e. 0 to 1 or 1 to 0.
Examples:
Input: str = “101100”, K = 1
Output: YES
Explanation: Flip last bit of str from 0 to 1.Input: str = “0101101”, K = 2
Output: NO
Explanation: Three moves required to make str a palindrome.
Approach: The idea is to traverse the string with two pointers.
- Match the bits pointed by both pointers and
- Keep count of the failed comparisons.
- Number of unmatched pairs will be the desired output.
Below is the implementation of the above approach:
C++
// C++ program to check // if given binary string // can be made palindrome in K moves #include <bits/stdc++.h> using namespace std; // Function to make Binary string // palindrome in K steps int MinFlipPalindrome(string str, int K) { int n = str.size(); int i = 0, j = n - 1, count = 0; while (i <= j) { if (str[i] == str[j]) { i += 1; j -= 1; continue ; } else { i += 1; j -= 1; count += 1; } } if (count <= K) return 1; else return 0; } // Driver code int main() { string str = "101011110" ; int K = 2; int res = MinFlipPalindrome(str, K); if (res == 1) cout << "YES" ; else cout << "NO" ; return 0; } |
C
// C program to check if given binary string // can be made palindrome in K moves #include <stdio.h> #include <string.h> // Function to make Binary string // palindrome in K steps int MinFlipPalindrome( char * str, int K) { int n = strlen (str); int i = 0, j = n - 1, count = 0; while (i <= j) { if (str[i] == str[j]) { i += 1; j -= 1; continue ; } else { i += 1; j -= 1; count += 1; } } if (count <= K) return 1; else return 0; } // Driver code int main() { char * str = "101011110" ; int K = 2; int res = MinFlipPalindrome(str, K); printf ( "%s\n" , (res ? "YES" : "NO" )); return 0; } // This code is contributed by phalasi. |
Java
// Java program to check // if given binary string // can be made palindrome in K moves import java.io.*; class GFG { // Function to make Binary string // palindrome in K steps static int MinFlipPalindrome(String str, int K) { int n = str.length(); int i = 0 , j = n - 1 , count = 0 ; while (i <= j) { if (str.charAt(i) == str.charAt(j)) { i += 1 ; j -= 1 ; continue ; } else { i += 1 ; j -= 1 ; count += 1 ; } } if (count <= K) return 1 ; else return 0 ; } // Driver code public static void main(String[] args) { String str = "101011110" ; int K = 2 ; int res = MinFlipPalindrome(str, K); if (res == 1 ) System.out.println( "YES" ); else System.out.println( "NO" ); } } // This code is contributed by Karandeep Singh |
Python3
# Python program for the above approach # Function to make Binary string # palindrome in K steps def MinFlipPalindrome( str , K): n = len ( str ) i = 0 j = n - 1 count = 0 while (i < = j): if ( str [i] = = str [j]): i + = 1 j - = 1 continue else : i + = 1 j - = 1 count + = 1 if (count < = K): return 1 else : return 0 # Driver code str = "101011110" K = 2 res = MinFlipPalindrome( str , K) if (res = = 1 ): print ( "YES" ) else : print ( "NO" ) # This code is contributed by sanjoy_62. |
C#
// C# program to check // if given binary string // can be made palindrome in K moves using System; class GFG { // Function to make Binary string // palindrome in K steps static int MinFlipPalindrome( string str, int K) { int n = str.Length; int i = 0, j = n - 1, count = 0; while (i <= j) { if (str[i] == str[j]) { i += 1; j -= 1; continue ; } else { i += 1; j -= 1; count += 1; } } if (count <= K) return 1; else return 0; } // Driver code public static void Main() { string str = "101011110" ; int K = 2; int res = MinFlipPalindrome(str, K); if (res == 1) Console.Write( "YES" ); else Console.Write( "NO" ); } } // This code is contributed by Samim Hossain Mondal. |
Javascript
<script> // JavaScript program to check // if given binary string // can be made palindrome in K moves // Function to make Binary string // palindrome in K steps const MinFlipPalindrome = (str, K) => { let n = str.length; let i = 0, j = n - 1, count = 0; while (i <= j) { if (str[i] == str[j]) { i += 1; j -= 1; continue ; } else { i += 1; j -= 1; count += 1; } } if (count <= K) return 1; else return 0; } // Driver code let str = "101011110" ; let K = 2; let res = MinFlipPalindrome(str, K); if (res == 1) document.write( "YES" ); else document.write( "NO" ); // This code is contributed by rakeshsahni </script> |
Output
NO
Time complexity: O(N)
Auxiliary Space: O(1)
Please Login to comment...