# Find all the patterns of “1(0+)1” in a given string | SET 1(General Approach)

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

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

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.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
2.2 Average Difficulty : 2.2/5.0
Based on 9 vote(s)