Open In App

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

Last Updated : 28 Oct, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

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++
// 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
// 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
# 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#
// 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 
JavaScript
<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.


Next Article
Article Tags :
Practice Tags :

Similar Reads