给定仅包含字符“ a”和“ b”的字符串str ,任务是检查字符串是否有效。在有效字符串,每组连续b的长度必须为2,并且必须出现1次或多次出现字符“ a”之后,即“ abba”是有效的子字符串,而“ abbb”和aba则不是。打印1,如果该字符串是有效的其他打印-1。
例子:
Input: str = “abbaaabbabba”
Output: 1
Input: str = “abbaaababb”
Output: -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