# Find all K length subarrays containing only 1s in given Binary String

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 ``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``)

## 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

 ``

Output
```1 2
6 7
7 8```

Time Complexity: O(N)
Auxiliary Space: O(1)

Previous
Next