在 C++ 中找到給定字串中所有“1(0+)1”的模式


假設一個字串有類似 1(0+)1 的模式。其中 (0+) 表示連續出現且非空的 1。我們必須找到所有模式。這些模式可以重疊。該字串不一定是二進位制字串。它只能包含數字和小寫字元。假設該字串類似 1101001,那麼就有兩種這樣的模式。101 和 1001。

為了解決這個問題,我們將遵循以下步驟:

  • 遍歷字串中的所有字元 c

  • 當 c 為 1 時,我們遍歷直到元素變成 0

  • 當 0 的流結束時,我們將檢查下一個字元是不是 1

  • 在到達字串末尾前一直重複這些步驟。

示例

#include<iostream>
using namespace std;
int countBinPattern(string main_str) {
   char last_char = main_str[0];
   int i = 1, counter = 0;
   while (i < main_str.size()) {
      if (main_str[i] == '0' && last_char == '1') {
         while (main_str[i] == '0')
            i++;
         if (main_str[i] == '1')
            counter++;
      }
      last_char = main_str[i];
         i++;
   }
   return counter;
}
int main() {
   string str = "10010110000101";
   cout << "Number of substrings of pattern 1(0+)1 is: " << countBinPattern(str);
}

輸出

Number of substrings of pattern 1(0+)1 is: 4

更新日期:2019-01-11

210 次瀏覽

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告