给定二进制字符串中不重叠的子字符串“101”和“010”的计数
给定二进制字符串str ,任务是找到“010”或“101”形式的非重叠子字符串的计数。
例子:
Input: str = “10101010101”
Output: 3
str[0..2] = “101”
str[3..5] = “010”
str[6..8] = “101”
Input: str = “111111111111110”
Output: 0
方法:初始化count = 0并为给定字符串中的每个索引i检查从当前索引i开始的大小为3的子字符串是否与“010”或“101”匹配。如果匹配,则更新count = count + 1和i = i + 3 (以避免子字符串重叠)否则将i增加1 。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the count of
// required non-overlapping sub-strings
int countSubStr(string s, int n)
{
// To store the required count
int count = 0;
for (int i = 0; i < n - 2;) {
// If "010" matches the sub-string
// starting at current index i
if (s[i] == '0' && s[i + 1] == '1'
&& s[i + 2] == '0') {
count++;
i += 3;
}
// If "101" matches the sub-string
// starting at current index i
else if (s[i] == '1' && s[i + 1] == '0'
&& s[i + 2] == '1') {
count++;
i += 3;
}
else {
i++;
}
}
return count;
}
// Driver code
int main()
{
string s = "10101010101";
int n = s.length();
cout << countSubStr(s, n);
return 0;
}
Java
// Java implementation of the approach
class GFG
{
// Function to return the count of
// required non-overlapping sub-strings
static int countSubStr(char[] s, int n)
{
// To store the required count
int count = 0;
for (int i = 0; i < n - 2😉
{
// If "010" matches the sub-string
// starting at current index i
if (s[i] == '0' && s[i + 1] == '1'
&& s[i + 2] == '0')
{
count++;
i += 3;
}
// If "101" matches the sub-string
// starting at current index i
else if (s[i] == '1' && s[i + 1] == '0'
&& s[i + 2] == '1')
{
count++;
i += 3;
}
else
{
i++;
}
}
return count;
}
// Driver code
public static void main(String[] args)
{
char[] s = "10101010101".toCharArray();
int n = s.length;
System.out.println(countSubStr(s, n));
}
}
// This code is contributed by 29AjayKumar
Python3
# Python3 implementation of the approach
# Function to return the count of
# required non-overlapping sub-strings
def countSubStr(s, n) :
# To store the required count
count = 0;
i = 0
while i < (n-2) :
# If "010" matches the sub-string
# starting at current index i
if (s[i] == '0' and s[i + 1] == '1'and s[i + 2] == '0') :
count += 1;
i += 3;
# If "101" matches the sub-string
# starting at current index i
elif (s[i] == '1' and s[i + 1] == '0'and s[i + 2] == '1') :
count += 1;
i += 3;
else :
i += 1;
return count;
# Driver code
if __name__ == "__main__" :
s = "10101010101";
n = len(s);
print(countSubStr(s, n));
# This code is contributed by AnkitRai01
C#
// C# implementation of the approach
using System;
class GFG
{
// Function to return the count of
// required non-overlapping sub-strings
static int countSubStr(char[] s, int n)
{
// To store the required count
int count = 0;
for (int i = 0; i < n - 2;)
{
// If "010" matches the sub-string
// starting at current index i
if (s[i] == '0' &&
s[i + 1] == '1' &&
s[i + 2] == '0')
{
count++;
i += 3;
}
// If "101" matches the sub-string
// starting at current index i
else if (s[i] == '1' &&
s[i + 1] == '0' &&
s[i + 2] == '1')
{
count++;
i += 3;
}
else
{
i++;
}
}
return count;
}
// Driver code
public static void Main(String[] args)
{
char[] s = "10101010101".ToCharArray();
int n = s.Length;
Console.WriteLine(countSubStr(s, n));
}
}
// This code is contributed by Rajput-Ji
Javascript
输出:
3
时间复杂度: O(n),其中 n 是字符串的长度。
辅助空间: O(n)