Javascript Program to Find Maximum number of 0s placed consecutively at the start and end in any rotation of a Binary String
Last Updated :
27 Jan, 2022
Given a binary string S of size N, the task is to maximize the sum of the count of consecutive 0s present at the start and end of any of the rotations of the given string S.
Examples:
Input: S = "1001"
Output: 2
Explanation:
All possible rotations of the string are:
"1001": Count of 0s at the start = 0; at the end = 0. Sum= 0 + 0 = 0.
"0011": Count of 0s at the start = 2; at the end = 0. Sum = 2 + 0=2
"0110": Count of 0s at the start = 1; at the end = 1. Sum= 1 + 1 = 2.
"1100": Count of 0s at the start = 0; at the end = 2. Sum = 0 + 2 = 2
Therefore, the maximum sum possible is 2.
Input: S = "01010"
Output: 2
Explanation:
All possible rotations of the string are:
"01010": Count of 0s at the start = 1; at the end = 1. Sum= 1+1=1
"10100": Count of 0s at the start = 0; at the end = 2. Sum= 0+2=2
"01001": Count of 0s at the start = 1; at the end = 0. Sum= 1+0=1
"10010": Count of 0s at the start = 0; at the end = 1. Sum= 0+1=1
"00101": Count of 0s at the start = 2; at the end = 0. Sum= 2+0=2
Therefore, the maximum sum possible is 2.
Naive Approach: The simplest idea is to generate all rotations of the given string and for each rotation, count the number of 0s present at the beginning and end of the string and calculate their sum. Finally, print the maximum sum obtained.
Below is the implementation of the above approach:
JavaScript
<script>
// Javascript program for the above approach
// Function to find the maximum sum of
// consecutive 0s present at the start
// and end of a string present in any
// of the rotations of the given string
function findMaximumZeros(str, n)
{
// Check if all the characters
// in the string are 0
var c0 = 0;
var i;
// Iterate over characters
// of the string
for (i = 0; i < n; ++i) {
if (str[i] == '0')
c0++;
}
// If the frequency of '1' is 0
if (c0 == n) {
// Print n as the result
document.write(n);
return;
}
// Concatenate the string
// with itself
var s = str + str;
// Stores the required result
var mx = 0;
var j;
// Generate all rotations of the string
for (i = 0; i < n; ++i) {
// Store the number of consecutive 0s
// at the start and end of the string
var cs = 0;
var ce = 0;
// Count 0s present at the start
for (j = i; j < i + n; ++j) {
if (s[j] == '0')
cs++;
else
break;
}
// Count 0s present at the end
for (j = i + n - 1; j >= i; --j) {
if (s[j] == '0')
ce++;
else
break;
}
// Calculate the sum
var val = cs + ce;
// Update the overall
// maximum sum
mx = Math.max(val, mx);
}
// Print the result
document.write(mx);
}
// Driver Code
// Given string
var s = "1001";
// Store the size of the string
var n = s.length;
findMaximumZeros(s, n);
</script>
Time Complexity: O(N2)
Auxiliary Space: O(N)
Efficient Approach: The idea is to find the maximum number of consecutive 0s in the given string. Also, find the sum of consecutive 0s at the start and the end of the string, and then print the maximum out of them.
Follow the steps below to solve the problem:
Below is the implementation of the above approach:
JavaScript
<script>
//Javascript program for
//the above approach
// Function to find the maximum sum of
// consecutive 0s present at the start
// and end of any rotation of the string str
function findMaximumZeros(str, n)
{
// Stores the count of 0s
var c0 = 0;
for (var i = 0; i < n; ++i) {
if (str[i] == '0')
c0++;
}
// If the frequency of '1' is 0
if (c0 == n) {
// Print n as the result
document.write( n);
return;
}
// Stores the required sum
var mx = 0;
// Find the maximum consecutive
// length of 0s present in the string
var cnt = 0;
for (var i = 0; i < n; i++) {
if (str[i] == '0')
cnt++;
else {
mx = Math.max(mx, cnt);
cnt = 0;
}
}
// Update the overall maximum sum
mx = Math.max(mx, cnt);
// Find the number of 0s present at
// the start and end of the string
var start = 0, end = n - 1;
cnt = 0;
// Update the count of 0s at the start
while (str[start] != '1' && start < n) {
cnt++;
start++;
}
// Update the count of 0s at the end
while (str[end] != '1' && end >= 0) {
cnt++;
end--;
}
// Update the maximum sum
mx = Math.max(mx, cnt);
// Print the result
document.write( mx);
}
var s = "1001";
// Store the size of the string
var n = s.length;
findMaximumZeros(s, n);
// This code is contributed by SoumikMondal
</script>
Time Complexity: O(N)
Auxiliary Space: O(1)
Please refer complete article on
Maximum number of 0s placed consecutively at the start and end in any rotation of a Binary String for more details!
Similar Reads
Maximum number of 0s placed consecutively at the start and end in any rotation of a Binary String Given a binary string S of size N, the task is to maximize the sum of the count of consecutive 0s present at the start and end of any of the rotations of the given string S. Examples: Input: S = "1001"Output: 2Explanation:All possible rotations of the string are:"1001": Count of 0s at the start = 0;
15+ min read
Check if any pair of consecutive 1s can be separated by at most M 0s by circular rotation of a Binary String Given a binary string S of length N and a positive integer M, the task is to check if it is possible to rotate the string circularly any number of times such that any pair of consecutive 1s are separated by at most M 0s. If it is possible, then print "Yes". Otherwise, print "No". Examples: Input: S
8 min read
Replace '?' to convert given string to a binary string with maximum count of '0' and "10" Given string str, consisting of three different types of characters '0', '1' and '?', the task is to convert the given string to a binary string by replacing the '?' characters with either '0' or '1' such that the count of 0s and 10 in the binary string is maximum. Examples: Input: str = 10?0?11Outp
4 min read
Split a Binary String such that count of 0s and 1s in left and right substrings is maximum Given a binary string, str of length N, the task is to find the maximum sum of the count of 0s on the left substring and count of 1s on the right substring possible by splitting the binary string into two non-empty substrings. Examples: Input: str = "000111" Output: 6 Explanation: Splitting the bina
7 min read
Maximize count of 0s in left and 1s in right substring by splitting given Binary string Given a binary string str, the task is to split the given binary string at any index into two non-empty substrings such that the sum of counts of 0s in the left substring and 1s in the right substring is maximum. Print the sum of such 0s and 1s in the end.Examples: Input: str = "0011110011" Output:
6 min read
Count of substrings with equal ratios of 0s and 1s till ith index in given Binary String Given a binary string S, the task is to print the maximum number of substrings with equal ratios of 0s and 1s till the ith index from the start. Examples: Input: S = "110001"Output: {1, 2, 1, 1, 1, 2}Explanation: The given string can be partitioned into the following equal substrings: Valid substrin
9 min read