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