문자열에 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