Open In App

Check if given Binary String can be made Palindrome using K flips

Improve
Improve
Like Article
Like
Save
Share
Report

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)

 



Last Updated : 24 Mar, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads