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.
- Iterate through index '0' to 'n-1'.
- If we encounter a '1', we iterate till the elements are '0'.
- After the stream of zeros ends, we check whether we encounter a '1' or not.
- Keep on doing this till we reach the end of string.
Below is the implementation of the above method.
Try It Yourself
// Java Code to count 1(0+)1
// patterns in a string
import java.io.*;
class GFG
{
// Function to count patterns
static int patternCount(String str)
{
/* Variable to store the last character*/
char last = str.charAt(0);
int i = 1, counter = 0;
while (i < str.length())
{
/* We found 0 and last character was '1',
state change*/
if (str.charAt(i) == '0' && last == '1')
{
while (i < str.length() && str.charAt(i) == '0')
i++;
// After the stream of 0's, we
// got a '1',counter incremented
// Break in case of non zero terminating string.
if (i == str.length()) {
break;
}
if (str.charAt(i) == '1')
counter++;
}
if (i == str.length()) {
break;
}
/* Last character stored */
last = str.charAt(i);
i++;
}
return counter;
}
// Driver Code
public static void main (String[] args)
{
String str = "1001ab010abc01001";
System.out.println(patternCount(str));
}
}
// This code is contributed by vt_m.
/* 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;
}
# Python3 code to count 1(0+)1 patterns in a
# Function to count patterns
def patternCount(str):
# Variable to store the last character
last = str[0]
i = 1; counter = 0
while (i < len(str)):
# We found 0 and last character was '1',
# state change
if (str[i] == '0' and last == '1'):
while (str[i] == '0'):
i += 1
# After the stream of 0's, we got a '1',
# counter incremented
if (str[i] == '1'):
counter += 1
# Last character stored
last = str[i]
i += 1
return counter
# Driver Code
str = "1001ab010abc01001"
ans = patternCount(str)
print (ans)
# This code is contributed by saloni1297
// C# Code to count 1(0 + )1
// patterns in a string
using System;
class GFG
{
// Function to count patterns
static int patternCount(String str)
{
// Variable to store the
// last character
char last = str[0];
int i = 1, counter = 0;
while (i < str.Length)
{
// 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
public static void Main ()
{
String str = "1001ab010abc01001";
Console.Write(patternCount(str));
}
}
// This code is contributed by nitin mittal
<?php
// PHP Code to count 1(0+)1 patterns
// in a string
// Function to count patterns
function patternCount($str)
{
// Variable to store the
// last character
$last = $str[0];
$i = 1;
$counter = 0;
while ($i < strlen($str))
{
// 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
$str = "1001ab010abc01001";
echo patternCount($str) ;
// This code is contributed by nitin mittal
?>
<script>
// javascript Code to count 1(0+)1
// patterns in a string
// Function to count patterns
function patternCount(str)
{
/* Variable to store the last character*/
var last = str.charAt(0);
var i = 1, counter = 0;
while (i < str.length)
{
/* We found 0 and last character was '1',
state change*/
if (str.charAt(i) == '0' && last == '1')
{
while (str.charAt(i) == '0')
i++;
// After the stream of 0's, we
// got a '1',counter incremented
if (str.charAt(i) == '1')
counter++;
}
/* Last character stored */
last = str.charAt(i);
i++;
}
return counter;
}
// Driver Code
var str = "1001ab010abc01001";
document.write(patternCount(str));
// This code is contributed by 29AjayKumar
</script>
Output
2
Time Complexity: O(n)
Auxiliary Space: O(1)