A string contains patterns of the form 1(0+)1 where (0+) represents any non-empty consecutive sequence of 0’s. Count all such patterns. The patterns are allowed to overlap.

**Note :** It contains digits and lowercase characters only. The string is not necessarily a binary. 100201 is not a valid pattern.

One approach to solve the problem is discussed here, other using Regular expressions is given in Set 2

**Examples:**

Input : 1101001 Output : 2 Input : 100001abc101 Output : 2

Let size of input string be n.

1. Iterate through index ‘0’ to ‘n-1’.

2. If we encounter a ‘1’, we iterate till the elements are ‘0’.

3. After the stream of zeros ends, we check whether we encounter a ‘1’ or not.

4. Keep on doing this till we reach the end of string.

Below is the C++ implementation of the above method.

/* Code to count 1(0+)1 patterns in a string */ #include <bits/stdc++.h> using namespace std; /* Function to count patterns */ int patternCount(string str) { /* Variable to store the last character*/ char last = str[0]; int i = 1, counter = 0; while (i < str.size()) { /* We found 0 and last character was '1', state change*/ if (str[i] == '0' && last == '1') { while (str[i] == '0') i++; /* After the stream of 0's, we got a '1', counter incremented*/ if (str[i] == '1') counter++; } /* Last character stored */ last = str[i]; i++; } return counter; } /* Driver Code */ int main() { string str = "1001ab010abc01001"; cout << patternCount(str) << endl; return 0; }

Output:

2

This article is contributed by **Rohit Thapliyal**. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.