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.
Java
// 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. |
C++
/* 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
# 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#
// 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 // 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 ?> |
Javascript
<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)