# Check if a binary string has two consecutive occurrences of one everywhere

Given a string str consisting of only characters ‘a’ and ‘b’, the task is to check whether the string is valid or not. In a valid string, every group of consecutive b must be of length 2 and must appear after 1 or more occurrences of character ‘a’ i.e. “abba” is a valid sub-string but “abbb” and aba are not. Print 1 if the string is valid else print -1.

Examples:

Input: str = “abbaaabbabba”
Output: 1

Input: str = “abbaaababb”
Output: -1

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: Find every occurrence of ‘b’ in the string and check whether it is a part of the sub-string “abb”. If the condition fails for any sub-string then print -1 else print 1.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function that returns 1 if str is valid ` `bool` `isValidString(string str, ``int` `n) ` `{ ` `    ``// Index of first appearance of 'b' ` `    ``int` `index = find(str.begin(),        ` `                     ``str.end(), ``'b'``) -  ` `                     ``str.begin(); ` ` `  `    ``// If str starts with 'b' ` `    ``if` `(index == 0) ` `        ``return` `false``; ` ` `  `    ``// While 'b' occurs in str ` `    ``while` `(index <= n - 1) ` `    ``{ ` `        ``// If 'b' doesn't appear after an 'a' ` `        ``if` `(str[index - 1] != ``'a'``) ` `            ``return` `false``; ` ` `  `        ``// If 'b' is not succeeded by another 'b' ` `        ``if` `(index + 1 < n && str[index + 1] != ``'b'``) ` `            ``return` `false``; ` ` `  `        ``// If sub-string is of the type "abbb" ` `        ``if` `(index + 2 < n && str[index + 2] == ``'b'``) ` `            ``return` `false``; ` ` `  `        ``// If str ends with a single b ` `        ``if` `(index == n - 1) ` `            ``return` `false``; ` ` `  `        ``index = find(str.begin() + index + 2,  ` `                     ``str.end(), ``'b'``) - str.begin(); ` `    ``} ` `    ``return` `true``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``string str = ``"abbaaabbabba"``; ` `    ``int` `n = str.length(); ` `    ``isValidString(str, n) ? cout ` `                ``<< ``"true"` `: cout << ``"false"``; ` `    ``return` `0; ` `} ` ` `  `// This code is contributed by ` `// sanjeev2552 `

## Java

 `// Java implementation of the approach ` `class` `GFG { ` ` `  `    ``// Function that returns 1 if str is valid ` `    ``private` `static` `boolean` `isValidString(String str, ``int` `n) ` `    ``{ ` ` `  `        ``// Index of first appearance of 'b' ` `        ``int` `index = str.indexOf(``"b"``); ` ` `  `        ``// If str starts with 'b' ` `        ``if` `(index == ``0``) ` `            ``return` `false``; ` ` `  `        ``// While 'b' occurs in str ` `        ``while` `(index != -``1``) { ` ` `  `            ``// If 'b' doesn't appear after an 'a' ` `            ``if` `(str.charAt(index - ``1``) != ``'a'``) ` `                ``return` `false``; ` ` `  `            ``// If 'b' is not succeeded by another 'b' ` `            ``if` `(index + ``1` `< n && str.charAt(index + ``1``) != ``'b'``) ` `                ``return` `false``; ` ` `  `            ``// If sub-string is of the type "abbb" ` `            ``if` `(index + ``2` `< n && str.charAt(index + ``2``) == ``'b'``) ` `                ``return` `false``; ` ` `  `            ``// If str ends with a single b ` `            ``if` `(index == n - ``1``) ` `                ``return` `false``; ` ` `  `            ``index = str.indexOf(``"b"``, index + ``2``); ` `        ``} ` `        ``return` `true``; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``String str = ``"abbaaabbabba"``; ` `        ``int` `n = str.length(); ` `        ``System.out.println(isValidString(str, n)); ` `    ``} ` `} `

## Python 3

 `# Python 3 implementation of the approach ` ` `  `# Function that returns 1 if str is valid ` `def` `isValidString(``str``, n): ` ` `  `    ``# Index of first appearance of 'b' ` `    ``idx ``=` `str``.find(``"b"``) ` ` `  `    ``# If str starts with 'b' ` `    ``if` `(idx ``=``=` `0``): ` `        ``return` `False` ` `  `    ``# While 'b' occurs in str ` `    ``while` `(idx !``=` `-``1``): ` ` `  `        ``# If 'b' doesn't appear after an 'a' ` `        ``if` `(``str``[idx ``-` `1``] !``=` `'a'``): ` `            ``return` `False` ` `  `        ``# If 'b' is not succeeded by another 'b' ` `        ``if` `(idx ``+` `1` `< n ``and` `str``[idx ``+` `1``] !``=` `'b'``): ` `            ``return` `False` ` `  `        ``# If sub-string is of the type "abbb" ` `        ``if` `(idx ``+` `2` `< n ``and` `str``[idx ``+` `2``] ``=``=` `'b'``): ` `            ``return` `False` ` `  `        ``# If str ends with a single b ` `        ``if` `(idx ``=``=` `n ``-` `1``): ` `            ``return` `False` ` `  `        ``idx ``=` `str``.find(``"b"``, idx ``+` `2``) ` ` `  `    ``return` `True` ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"``: ` ` `  `    ``str` `=` `"abbaaabbabba"` `    ``n ``=` `len``(``str``) ` `    ``print``(isValidString(``str``, n)) ` ` `  `# This code is contributed by ita_c `

## C#

 `// C# implementation of the approach  ` `using` `System; ` ` `  `class` `GFG  ` `{  ` ` `  `    ``// Function that returns 1 if str is valid  ` `    ``private` `static` `bool` `isValidString(``string` `str, ``int` `n)  ` `    ``{  ` ` `  `        ``// Index of first appearance of 'b'  ` `        ``int` `index = str.IndexOf(``"b"``);  ` ` `  `        ``// If str starts with 'b'  ` `        ``if` `(index == 0)  ` `            ``return` `false``;  ` ` `  `        ``// While 'b' occurs in str  ` `        ``while` `(index != -1)  ` `        ``{  ` ` `  `            ``// If 'b' doesn't appear after an 'a'  ` `            ``if` `(str[index - 1] != ``'a'``)  ` `                ``return` `false``;  ` ` `  `            ``// If 'b' is not succeeded by another 'b'  ` `            ``if` `(index + 1 < n && str[index + 1] != ``'b'``)  ` `                ``return` `false``;  ` ` `  `            ``// If sub-string is of the type "abbb"  ` `            ``if` `(index + 2 < n && str[index + 2] == ``'b'``)  ` `                ``return` `false``;  ` ` `  `            ``// If str ends with a single b  ` `            ``if` `(index == n - 1)  ` `                ``return` `false``;  ` ` `  `            ``index = str.IndexOf(``"b"``, index + 2);  ` `        ``}  ` `        ``return` `true``;  ` `    ``}  ` ` `  `    ``// Driver code  ` `    ``public` `static` `void` `Main()  ` `    ``{  ` `        ``string` `str = ``"abbaaabbabba"``;  ` `        ``int` `n = str.Length;  ` `        ``Console.WriteLine(isValidString(str, n));  ` `    ``}  ` `}  ` ` `  `// This code is contributed by Ryuga `

Output:

```true
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.