Open In App

Longest sub string of 0’s in a binary string which is repeated K times

Given binary string S of size N and a number K. The task is to find the Longest sub string of 0’s in the string which is formed by repeating given string K times. 
Examples: 

Input : S = “100001” , K = 3 
Output :
After repeating given string 3 time, string becomes 100001100001100001. 
The longest substring of 0’s is 4 

Input : S = “010001000”, K = 4 
Output : 4

 
 

Approach: 

  1. If K is one, then find the longest substring of 0’s in a string using a simple loops
  2. If K is greater than one, then add a given string to the end of the string. Then string becomes S+S and length will be 2*N and find the longest substring of 0’s in a string using a simple loops 
    • If the longest substring is 2*N then, our answer will be K*N
    • Otherwise it will be the our required answer

Below is the implementation of the above approach: 




// C++ program to find the find the Longest continuous
// sequence of '0' after repeating Given string K time
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the longest substring of 0's
int longest_substring(string s, int k)
{
    // To store size of the string
    int n = s.size();
     
    if(k>1)
    {
        s += s;
        n *= 2;
    }   
     
    // To store the required answer
    int ans = 0;
     
    // Find the longest substring of 0's
    int i = 0;
    while (i < n)
    {
        int x = 0;
         
        // Run a loop upto s[i] is zero
        while (s[i] == '0' && i < n)
            x++, i++;
        ans = max(ans, x);
        i++;
    }
     
    // Check the conditions
    if(k==1 or ans!=n)
        return ans;
         
    else
        return (ans/2)*k;
}
 
// Driver code
int main()
{
    string s = "010001000";
     
    int k = 4;
     
    // Function call
    cout << longest_substring(s, k);
     
    return 0;
}




// Java program to find the Longest continuous
// sequence of '0' after repeating Given string K time
class GFG
{
 
// Function to find the longest substring of 0's
static int longest_substring(String s, int k)
{
    // To store size of the string
    int n = s.length();
     
    if(k > 1)
    {
        s += s;
        n *= 2;
    }
     
    // To store the required answer
    int ans = 0;
     
    // Find the longest substring of 0's
    int i = 0;
    while (i < n)
    {
        int x = 0;
         
        // Run a loop upto s[i] is zero
        while (i < n && s.charAt(i) == '0')
        {
            x++; i++;
        }
        ans = Math.max(ans, x);
        i++;
    }
     
    // Check the conditions
    if(k == 1 || ans != n)
        return ans;
         
    else
        return (ans / 2) * k;
}
 
// Driver code
public static void main(String[] args)
{
    String s = "010001000";
     
    int k = 4;
     
    // Function call
    System.out.println(longest_substring(s, k));
}
}
 
// This code is contributed by Rajput-Ji




# Python3 program to find the find the Longest continuous
# sequence of '0' after repeating Given K time
 
# Function to find the longest subof 0's
def longest_substring(s, k):
    # To store size of the string
    n = len(s)
 
    if(k>1):
        s += s
        n *= 2
 
    # To store the required answer
    ans = 0
 
    # Find the longest subof 0's
    i = 0
    while (i < n):
        x = 0
 
        # Run a loop upto s[i] is zero
        while (i < n and s[i] == '0'):
            x,i=x+1, i+1
        ans = max(ans, x)
        i+=1
 
    # Check the conditions
    if(k==1 or ans!=n):
        return ans
 
    else:
        return (ans//2)*k
 
 
# Driver code
 
s = "010001000"
 
k = 4
 
# Function call
print(longest_substring(s, k))
 
# This code is contributed by mohit kumar 29




// C# program to find the Longest continuous
// sequence of '0' after repeating Given string K time
using System;
     
class GFG
{
 
// Function to find the longest substring of 0's
static int longest_substring(String s, int k)
{
    // To store size of the string
    int n = s.Length;
     
    if(k > 1)
    {
        s += s;
        n *= 2;
    }
     
    // To store the required answer
    int ans = 0;
     
    // Find the longest substring of 0's
    int i = 0;
    while (i < n)
    {
        int x = 0;
         
        // Run a loop upto s[i] is zero
        while (i < n && s[i] == '0')
        {
            x++; i++;
        }
        ans = Math.Max(ans, x);
        i++;
    }
     
    // Check the conditions
    if(k == 1 || ans != n)
        return ans;
         
    else
        return (ans / 2) * k;
}
 
// Driver code
public static void Main(String[] args)
{
    String s = "010001000";
     
    int k = 4;
     
    // Function call
    Console.WriteLine(longest_substring(s, k));
}
}
 
// This code is contributed by PrinciRaj1992




<script>
 
// Javascript program to find the find the Longest continuous
// sequence of '0' after repeating Given string K time
 
// Function to find the longest substring of 0's
function longest_substring(s, k)
{
    // To store size of the string
    var n = s.length;
     
    if(k>1)
    {
        s += s;
        n *= 2;
    }   
     
    // To store the required answer
    var ans = 0;
     
    // Find the longest substring of 0's
    var i = 0;
    while (i < n)
    {
        var x = 0;
         
        // Run a loop upto s[i] is zero
        while (s[i] == '0' && i < n)
            x++, i++;
        ans = Math.max(ans, x);
        i++;
    }
     
    // Check the conditions
    if(k==1 || ans!=n)
        return ans;
         
    else
        return (ans/2)*k;
}
 
// Driver code
var s = "010001000";
 
var k = 4;
 
// Function call
document.write( longest_substring(s, k));
 
</script>

Time Complexity: O(n), where n is the length of the string
Auxiliary Space: O(n), for concatenating the string with itself.


Article Tags :