Find all K length subarrays containing only 1s in given Binary String
Last Updated :
29 Dec, 2021
Given a binary string str[], the task is to find all possible K length subarrays containing only 1s and print their starting and ending index.
Examples:
Input: str = "0101000", K=1
Output:
1 1
3 3
Explanation: Substrings at positions 1 and 3 are the substrings with value 1.
Input: str = "11111001", K=3
Output:
0 2
1 3
2 4
Approach: The given problem can be solved with the help of the Sliding Window technique. Create a window of size K initially with a count of 1s from range 0 to K-1. Then traverse the string from index 1 to N-1 and subtract the value of i-1 and add the value of i+K to the current count. If the current count is equal to K, print the value of i and i+k-1 as one of the possible subarrays. Follow the steps below to solve the problem:
- Initialize the variable cntOf1s as 0.
- Iterate over the range [0, K) using the variable i and perform the following tasks:
- If s[i] equals 1 then increase the value of cntOf1s by 1.
- If cntOf1s equals K then print the current substring as one of the answer.
- Iterate over the range [1, N) using the variable i and perform the following tasks:
- Reduce the value from the left and add from the right to the variable cntOf1s if the characters at that position are 1.
- If the value of cntOf1s equals K, then print the current substring as the answer.
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 all possible
// k length subarrays
void get(string s, int k)
{
int n = s.length();
int cntOf1s = 0;
// Initial window
for (int i = 0; i < k; i++)
if (s[i] == '1')
cntOf1s++;
if (cntOf1s == k)
cout << 0 << " " << k - 1 << endl;
// Traverse the string
for (int i = 1; i < n; i++) {
// Subtract the value from the left and
// add from the right
cntOf1s = cntOf1s - (s[i - 1] - '0')
+ (s[i + k - 1] - '0');
// Check the condition
if (cntOf1s == k)
cout << i << " " << i + k - 1 << endl;
}
}
// Driver Code
int main()
{
string str = "0110101110";
int K = 2;
get(str, K);
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG{
// Function to find all possible
// k length subarrays
static void get(char[] s, int k)
{
int n = s.length;
int cntOf1s = 0;
// Initial window
for (int i = 0; i < k; i++)
if (s[i] == '1')
cntOf1s++;
if (cntOf1s == k)
System.out.print(0+ " " + (k - 1 )+"\n");
// Traverse the String
for (int i = 1; i < n && (i + k - 1)<n; i++) {
// Subtract the value from the left and
// add from the right
cntOf1s = cntOf1s - (s[i - 1] - '0')
+ (s[i + k - 1] - '0');
// Check the condition
if (cntOf1s == k)
System.out.print(i+ " " + (i + k - 1 )+"\n");
}
}
// Driver Code
public static void main(String[] args)
{
String str = "0110101110";
int K = 2;
get(str.toCharArray(), K);
}
}
// This code is contributed by 29AjayKumar
Python3
# python3 program for the above approach
# Function to find all possible
# k length subarrays
def get(s, k):
n = len(s)
cntOf1s = 0
# Initial window
for i in range(0, k):
if (s[i] == '1'):
cntOf1s += 1
if (cntOf1s == k):
print(f"{0} {k - 1}")
# Traverse the string
for i in range(1, n - k + 1):
# Subtract the value from the left and
# add from the right
cntOf1s = cntOf1s - (ord(s[i - 1]) - ord('0')) + \
(ord(s[i + k - 1]) - ord('0'))
# Check the condition
if (cntOf1s == k):
print(f"{i} {i + k - 1}")
# Driver Code
if __name__ == "__main__":
str = "0110101110"
K = 2
get(str, K)
# This code is contributed by rakeshsahni
C#
// C# program for the above approach
using System;
class GFG
{
// Function to find all possible
// k length subarrays
static void get(char[] s, int k)
{
int n = s.Length;
int cntOf1s = 0;
// Initial window
for (int i = 0; i < k; i++)
if (s[i] == '1')
cntOf1s++;
if (cntOf1s == k)
Console.Write(0 + " " + (k - 1) + "\n");
// Traverse the String
for (int i = 1; i < n && (i + k - 1) < n; i++)
{
// Subtract the value from the left and
// add from the right
cntOf1s = cntOf1s - (s[i - 1] - '0')
+ (s[i + k - 1] - '0');
// Check the condition
if (cntOf1s == k)
Console.Write(i + " " + (i + k - 1) + "\n");
}
}
// Driver Code
public static void Main()
{
String str = "0110101110";
int K = 2;
get(str.ToCharArray(), K);
}
}
// This code is contributed by Saurabh Jaiswal
JavaScript
<script>
// JavaScript code for the above approach
// Function to find all possible
// k length subarrays
function get(s, k) {
let n = s.length;
let cntOf1s = 0;
// Initial window
for (let i = 0; i < k; i++)
if (s[i] == '1')
cntOf1s++;
if (cntOf1s == k)
document.write(0 + ' ' + (k - 1) + '<br>');
// Traverse the string
for (let i = 1; i < n; i++) {
// Subtract the value from the left and
// add from the right
cntOf1s = cntOf1s - (s[i - 1].charCodeAt(0) - '0'.charCodeAt(0))
+ (s[i + k - 1].charCodeAt(0) - '0'.charCodeAt(0));
// Check the condition
if (cntOf1s == k)
document.write(i + ' ' + (i + k - 1) + '<br>');
}
}
// Driver Code
let str = "0110101110";
let K = 2;
get(str, K);
// This code is contributed by Potta Lokesh
</script>
Time Complexity: O(N)
Auxiliary Space: O(1)
Similar Reads
Count of K length subarrays containing only 1s in given Binary String Given a binary string str, the task is to find the count of K length subarrays containing only 1s. Examples: Input: str = "0101000", K=1Output: 2Explanation: 0101000 -> There are 2 subarrays with 1 ones Input: str = "11111001", K=3Output: 3 Approach: The task can be solved by keeping track of the
4 min read
Count of K length subarrays containing only 1s in given Binary String | Set 2 Given binary string str, the task is to find the count of K length subarrays containing only 1s. Examples Input: str = "0101000", K=1Output: 2Explanation: 0101000 -> There are 2 subarrays of length 1 containing only 1s. Input: str = "11111001", K=3Output: 3 Approach: The given problem can also be
4 min read
Count of substrings of a Binary string containing only 1s Given a binary string of length N, we need to find out how many substrings of this string contain only 1s. Examples: Input: S = "0110111"Output: 9Explanation:There are 9 substring with only 1's characters. "1" comes 5 times. "11" comes 3 times. "111" comes 1 time. Input: S = "000"Output: 0 The_Appro
6 min read
Count of substrings of a binary string containing K ones Given a binary string of length N and an integer K, we need to find out how many substrings of this string are exist which contains exactly K ones. Examples: Input : s = â10010â K = 1 Output : 9 The 9 substrings containing one 1 are, â1â, â10â, â100â, â001â, â01â, â1â, â10â, â0010â and â010âRecommen
7 min read
Count of setbits in bitwise OR of all K length substrings of given Binary String Given a binary string str of length N, the task is to find the number of setbits in the bitwise OR of all the K length substrings of string str. Examples: Input: N = 4, K = 3, str = "1111"Output: 3Explanation: All 3-sized substrings of S are:"111" and "111". The OR of these strings is "111". Therefo
8 min read