C++ 中字符串中“1(0+)1”模式出现的次数
给定一个包含 0、1 和其他字母的字符串 str。它还包含“1(0+)1”形式的模式,其中 0+ 表示任意数量(>0)的连续 0。目标是在字符串 str 中找到此类模式(“1(0+)1”)。
让我们通过示例来理解
输入 − str = “abb010bb10111011”
输出 − 字符串中“1(0+)1”模式出现的次数为 - 2
说明 − str 中的模式突出显示: “abb010bb10111011”, “abb010bb10111011”
输入 − str = “01001011001001100”
输出 − 字符串中“1(0+)1”模式出现的次数为 - 4
说明 − str 中的模式突出显示: “01001011001001100”, “01001011001001100”, “01001011001001100”, “01001011001001100”
下面程序中使用的方法如下
可以看出,所有模式都以 1 开始和结束。我们将使用一个标志变量 check=1 标记第一个 1 并跳过所有 0。
对于任何其他字符(既不是 0 也不是 1),将 check 设置为 0。
如果我们找到另一个 1 且标志 check 为 1,则查看前一个值是否为 0。如果是,则递增计数,因为前一个 0 在两个 1 之间。对于任何非 0 或 1,再次将 check 设置为 0。
将输入字符串作为 str。
函数 Pattern_occurrences(string str, int length) 获取字符串及其长度,并返回字符串中“1(0+)1”模式出现的次数
将初始计数设置为 0。
将标志变量 check 最初设置为 0。
使用 for 循环遍历 str,从索引 i=0 到 i<length。
如果当前字符 str[i] 为 1 且 check 为 0,则将 check 设置为 1 并继续。
如果当前字符 str[i] 为 1 且 check 为 1。那么它是第二个 1。检查前一个值 str[i-1] 是否为 0。如果是,则找到模式。递增计数。
如果当前字符既不是 0 也不是 1,则它永远不会成为模式的一部分。将 check 设置为 0。现在遇到的下一个 1 将被视为下一个模式的开始(如果存在)。
最后,count 将包含 str 中此类模式的数量。
返回 count 作为结果。
示例
#include<iostream>
using namespace std;
int Pattern_occurrences(string str, int length){
int count = 0;
bool check = 0;
for (int i = 0; i < length ; i++){
if (str[i] == '1' && check == 1){
if (str[i - 1] == '0'){
count++;
}
}
if (str[i] == '1' && check == 0){
check = 1;
continue;
}
if (str[i] != '0' && str[i] != '1'){
check = 0;
}
}
return count;
}
int main(){
string str = "01010111011";
int length = str.length();
cout<<"Count of occurrences of a “1(0+)1” pattern in a string are: "<< Pattern_occurrences(str, length);
return 0;
}输出
如果我们运行以上代码,它将生成以下输出:
Count of occurrences of a “1(0+)1” pattern in a string are: 3
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP