Find all the patterns of “1(0+)1” in a given string (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
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> |
2
Time Complexity: O(n)
Auxiliary Space: O(1)
This article is contributed by Rohit Thapliyal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Login to comment...