Maximum Consecutive Zeroes in Concatenated Binary String
Last Updated :
07 Sep, 2022
You are given a binary string str of length n. Suppose you create another string of size n * k by concatenating k copies of str together. What is the maximum size of a substring of the concatenated string consisting only of 0’s? Given that k > 1.
Examples:
Input : str = “110010”, k = 2
Output : 2
String becomes 110010110010 after two concatenations. This string has two zeroes.
Input : str = “00100110”, k = 4
Output : 3
If the given string contains all zeroes then the answer is n * k. If S contains ones then the answer is either the maximum length of a substring of str containing only zeroes, or the sum between the length of the maximal prefix of S containing only zeroes and the length of the maximal suffix of str containing only zeroes. The last one must be computed only if k > 1.
Implementation:
C++
#include<bits/stdc++.h>
using namespace std;
int max_length_substring(string st,
int n, int k)
{
int max_len = 0;
int len = 0;
for ( int i = 0; i < n; ++i)
{
if (st[i] == '0' )
len++;
else
len = 0;
max_len = max(max_len, len);
}
if (max_len == n)
return n * k;
int pref = 0, suff = 0;
for ( int i = 0; st[i] == '0' ;
++i, ++pref);
for ( int i = n - 1; st[i] == '0' ;
--i, ++suff);
if (k > 1)
max_len = max(max_len,
pref + suff);
return max_len;
}
int main()
{
int n = 6;
int k = 3;
string st = "110010" ;
int ans = max_length_substring(st, n, k);
cout << ans;
}
|
Java
class GFG {
static int max_length_substring(String st,
int n, int k)
{
int max_len = 0 ;
int len = 0 ;
for ( int i = 0 ; i < n; ++i) {
if (st.charAt(i) == '0' )
len++;
else
len = 0 ;
max_len = Math.max(max_len, len);
}
if (max_len == n)
return n * k;
int pref = 0 , suff = 0 ;
for ( int i = 0 ; st.charAt(i) == '0' ; ++i, ++pref)
;
for ( int i = n - 1 ; st.charAt(i) == '0' ; --i, ++suff)
;
if (k > 1 )
max_len = Math.max(max_len, pref + suff);
return max_len;
}
public static void main(String[] args)
{
int n = 6 ;
int k = 3 ;
String st = "110010" ;
int ans = max_length_substring(st, n, k);
System.out.println(ans);
}
}
|
Python3
def max_length_substring(st, n, k):
max_len = 0
len = 0
for i in range ( 0 , n):
if (st[i] = = '0' ):
len = len + 1 ;
else :
len = 0
max_len = max (max_len, len )
if (max_len = = n):
return n * k
pref = 0
suff = 0
i = 0
while (st[i] = = '0' ):
i = i + 1
pref = pref + 1
i = n - 1
while (st[i] = = '0' ):
i = i - 1
suff = suff + 1
if (k > 1 ):
max_len = max (max_len,
pref + suff)
return max_len
n = 6
k = 3
st = "110010"
ans = max_length_substring(st, n, k)
print (ans)
|
C#
using System;
class GFG
{
static int max_length_substring( string st,
int n, int k)
{
int max_len = 0;
int len = 0;
for ( int i = 0; i < n; ++i)
{
if (st[i] == '0' )
len++;
else
len = 0;
max_len = Math.Max(max_len, len);
}
if (max_len == n)
return n * k;
int pref = 0, suff = 0;
for ( int i = 0; st[i] == '0' ;
++i, ++pref);
for ( int i = n - 1; st[i] == '0' ;
--i, ++suff);
if (k > 1)
max_len = Math.Max(max_len,
pref + suff);
return max_len;
}
public static void Main( string [] args)
{
int n = 6;
int k = 3;
string st = "110010" ;
int ans = max_length_substring(st, n, k);
Console.WriteLine(ans);
}
}
|
PHP
<?php
function max_length_substring( $st , $n , $k )
{
$max_len = 0;
$len = 0;
for ( $i = 0; $i < $n ; ++ $i )
{
if ( $st [ $i ] == '0' )
$len ++;
else
$len = 0;
$max_len = max( $max_len , $len );
}
if ( $max_len == $n )
return $n * $k ;
$pref = 0;
$suff = 0;
for ( $i = 0; $st [ $i ] == '0' ;
++ $i , ++ $pref );
for ( $i = $n - 1; $st [ $i ] == '0' ;
-- $i , ++ $suff );
if ( $k > 1)
$max_len = max( $max_len ,
$pref + $suff );
return $max_len ;
}
$n = 6;
$k = 3;
$st = "110010" ;
$ans = max_length_substring( $st , $n , $k );
echo $ans ;
?>
|
Javascript
function max_length_substring(st, n, k)
{
var max_len = 0;
var len = 0;
for ( var i = 0; i < n; i++)
{
if (st[i] == '0' )
len = len + 1;
else
len = 0;
max_len = Math.max(max_len, len);
}
if (max_len == n)
return n * k;
var pref = 0;
var suff = 0;
var i = 0;
while (st[i] == '0' )
{
i = i + 1;
pref = pref + 1;
}
i = n - 1;
while (st[i] == '0' )
{
i = i - 1;
suff = suff + 1;
}
if (k > 1)
max_len = Math.max(max_len, pref + suff);
return max_len;
}
var n = 6;
var k = 3;
var st = "110010" ;
var ans = max_length_substring(st, n, k);
console.log(ans);
|
Complexity Analysis:
- Time Complexity: O(N), where N represents the length of the given string.
- Auxiliary Space: O(1), no extra space is required, so it is a constant.
Share your thoughts in the comments
Please Login to comment...