 GeeksforGeeks App
Open App Browser
Continue

# 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 ``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 ``#include ` `// 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

 ``

Output

`NO`

Time complexity: O(N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up