Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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