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

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:

Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }
}

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

true


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.



Improved By : AnkitRai01, Ita_c