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)