Saturday, October 18, 2025
HomeData Modelling & AIMinimize flips to make binary string as all 1s by flipping characters...

Minimize flips to make binary string as all 1s by flipping characters in substring of size K repeatedly

Given a binary string S of size N and an integer K, the task is to find the minimum number of operations required to make all characters as 1s in the binary string by flipping characters in the substring of size K. If it is not possible to do so, then print “-1”.

Examples:

Input: S = “00010110 “, K = 3
Output: 3
Explanation:
Below are the operations performed:

  1. Consider the substring S[0, 2] which is of size K(= 3) and flipping those characters modifies the string to “11110110”.
  2. Consider the substring S[4, 6] which is of size K(= 3) and flipping those characters modifies the string to “11111000”.
  3. Consider the substring S[5, 7] which is of size K(= 3) and flipping those characters modifies the string to “11111111”.

After the above operations, all the 0s are converted to 1s, and the minimum number of operations required is 3.

Input: S = “01010”, K = 4
Output: -1

Approach: The given problem can be solved using the Greedy Approach. Follow the below steps to solve the problem:

  • Initialize a variable, say minOperations as 0 that stores the count of the minimum number of operations required.
  • Traverse the string S using the variable i and if the characters S[i] is ‘0’ and the value of (i + K) is at most K, then flip all the characters of the substring S[i, i + K] and increment the value of minOperations by 1.
  • After the above operations, traverse the string S and if there exists any character ‘0’ then print “-1” and break out of the loop.
  • If all the characters of the string S are 1s, then print the minOperations as the resultant minimum number of operations.

Below is the implementation of the above approach:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the minimum number
// of operations required to convert all
// the characters to 1 by flipping the
// substrings of size K
void minOperation(string S, int K, int N)
{
 
    // Stores the minimum number of
    // operations required
    int min = 0;
 
    int i;
 
    // Traverse the string S
    for (i = 0; i < N; i++) {
 
        // If the character is 0
        if (S[i] == '0' && i + K <= N) {
 
            // Flip the substrings of
            // size K starting from i
            for (int j = i; j < i + K; j++) {
                if (S[j] == '1')
                    S[j] = '0';
                else
                    S[j] = '1';
            }
 
            // Increment the minimum count
            // of operations required
            min++;
        }
    }
 
    // After performing the operations
    // check if string S contains any 0s
    for (i = 0; i < N; i++) {
        if (S[i] == '0')
            break;
    }
 
    // If S contains only 1's
    if (i == N)
        cout << min;
    else
        cout << -1;
}
 
// Driver Code
int main()
{
 
    string S = "00010110";
    int K = 3;
    int N = S.length();
    minOperation(S, K, N);
 
    return 0;
}


Java




// Java program for the above approach
public class GFG
{
 
// Function to find the minimum number
// of operations required to convert all
// the characters to 1 by flipping the
// substrings of size K
static void minOperation(String S, int K, int N)
{
 
    // Stores the minimum number of
    // operations required
    int min = 0;
 
    int i;
 
    // Traverse the string S
    for (i = 0; i < N; i++) {
 
        // If the character is 0
        if (S.charAt(i) == '0' && i + K <= N) {
 
            // Flip the substrings of
            // size K starting from i
            for (int j = i; j < i + K; j++) {
                if (S.charAt(j) == '1')
                    S = S.substring(0, j) + '0' + S.substring(j + 1);
                else
                   S = S.substring(0, j) + '1' + S.substring(j + 1);
            }
 
            // Increment the minimum count
            // of operations required
            min++;
        }
    }
 
    // After performing the operations
    // check if string S contains any 0s
    for (i = 0; i < N; i++) {
        if (S.charAt(i) == '0')
            break;
    }
 
    // If S contains only 1's
    if (i == N)
      System.out.println(min);
    else
      System.out.println(-1);
}
 
// Driver Code
public static void main(String []args)
{
 
    String S = "00010110";
    int K = 3;
    int N = S.length();
    minOperation(S, K, N);
}
}
 
// This code is contributed by AnkThon


Python3




# Function to find the minimum number
# of operations required to convert all
# the characters to 1 by flipping the
# substrings of size K
def minOperation(St, K, N):
    S = list(St)
 
    # Stores the minimum number of
    # operations required
    min = 0
 
    i = 0
 
    # Traverse the string S
    for i in range(0, N):
 
        # If the character is 0
        if (S[i] == '0' and i + K <= N):
 
            # Flip the substrings of
            # size K starting from i
            j = i
            while(j < i + K):
                if (S[j] == '1'):
                    S[j] = '0'
                else:
                    S[j] = '1'
                j += 1
 
            # Increment the minimum count
            # of operations required
            min += 1
 
    # After performing the operations
    # check if string S contains any 0s
    temp = 0
 
    for i in range(0, N):
        temp += 1
        if (S[i] == '0'):
            break
 
    # If S contains only 1's
    if (temp == N):
        print(min)
    else:
        print(-1)
 
# Driver Code
S = "00010110"
K = 3
N = len(S)
minOperation(S, K, N)
 
# This code is contributed by gfgking


C#




// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG{
 
// Function to find the minimum number
// of operations required to convert all
// the characters to 1 by flipping the
// substrings of size K
static void minOperation(string S, int K, int N)
{
 
    // Stores the minimum number of
    // operations required
    int min = 0;
 
    int i;
 
    // Traverse the string S
    for (i = 0; i < N; i++) {
 
        // If the character is 0
        if (S[i] == '0' && i + K <= N) {
 
            // Flip the substrings of
            // size K starting from i
            for (int j = i; j < i + K; j++) {
                if (S[j] == '1')
                    S = S.Substring(0, j) + '0' + S.Substring(j + 1);
                else
                   S = S.Substring(0, j) + '1' + S.Substring(j + 1);
            }
 
            // Increment the minimum count
            // of operations required
            min++;
        }
    }
 
    // After performing the operations
    // check if string S contains any 0s
    for (i = 0; i < N; i++) {
        if (S[i] == '0')
            break;
    }
 
    // If S contains only 1's
    if (i == N)
      Console.Write(min);
    else
      Console.Write(-1);
}
 
// Driver Code
public static void Main()
{
 
    string S = "00010110";
    int K = 3;
    int N = S.Length;
    minOperation(S, K, N);
}
}
 
// This code is contributed by SURENDRA_GANGWAR.


Javascript




<script>
 
// Function to find the minimum number
// of operations required to convert all
// the characters to 1 by flipping the
// substrings of size K
function minOperation(St, K, N)
{
    S = St.split('');
 
    // Stores the minimum number of
    // operations required
    let min = 0;
 
    let i;
 
    // Traverse the string S
    for (i = 0; i < N; i++) {
 
        // If the character is 0
        if (S[i] == '0' && i + K <= N) {
 
            // Flip the substrings of
            // size K starting from i
            for (let j = i; j < i + K; j++) {
                if (S[j] == '1')
                    S[j] = '0';
                else
                    S[j] = '1';
            }
 
            // Increment the minimum count
            // of operations required
            min++;
        }
    }
 
    // After performing the operations
    // check if string S contains any 0s
    for (i = 0; i < N; i++) {
        if (S[i] == '0')
            break;
    }
 
    // If S contains only 1's
    if (i == N)
        document.write(min);
    else
        document.write(-1);
}
 
// Driver Code
        let S = "00010110";
    let K = 3;
    let N = S.length;
    minOperation(S, K, N);
 
// This code is contributed by sanjoy_62.   
</script>


 
 

Output: 

3

 

 

Time Complexity: O(N*K)
Auxiliary Space: O(1)

 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Dominic
32361 POSTS0 COMMENTS
Milvus
88 POSTS0 COMMENTS
Nango Kala
6728 POSTS0 COMMENTS
Nicole Veronica
11892 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11954 POSTS0 COMMENTS
Shaida Kate Naidoo
6852 POSTS0 COMMENTS
Ted Musemwa
7113 POSTS0 COMMENTS
Thapelo Manthata
6805 POSTS0 COMMENTS
Umr Jansen
6801 POSTS0 COMMENTS