📌  相关文章
📜  检查二进制字符串是否到处连续出现两次

📅  最后修改于: 2021-04-30 02:28:17             🧑  作者: Mango

给定仅包含字符“ a”“ b”的字符串str ,任务是检查字符串是否有效。在有效字符串,每组连续b的长度必须为2,并且必须出现1次或多次出现字符“ a”之后,“ abba”是有效的子字符串,而“ abbb”aba则不是。打印1,如果该字符串是有效的其他打印-1。

例子:

方法:查找字符串所有出现的“ b” ,然后检查它是否属于子字符串“ abb”的一部分。如果条件对于任何子字符串均失败,则打印-1,否则打印1

下面是上述方法的实现:

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


输出:
true