문자열 s가 있다고 가정하고 0과 1의 수가 같은 연속적인 하위 문자열의 수를 찾아야 하며 이러한 하위 문자열의 모든 0과 모든 1이 연속적으로 그룹화됩니다. 부분 문자열이 여러 번 발생하면 발생한 횟수로 계산됩니다.
따라서 입력이 "11001100"과 같으면 하위 문자열이 "1100", "10","0011", "01", "1100", "10"이므로 출력은 6이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 크기가 2인 배열 cnt를 정의하고 0으로 채웁니다.
- res :=0
- 초기화 i의 경우:=0, i <길이 s일 때 업데이트(i를 1만큼 증가), 수행 -
- num :=s[i] - '0'의 ASCII
- i가 0과 같거나 s[i]가 s[i - 1]과 같지 않으면 -
- cnt[숫자] :=0
- (cnt[num]을 1씩 증가)
- cnt[num] <=cnt[1 - num]이면 -
- (해상도 1 증가)
- 반환 결과
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int countBinarySubstrings(string s) {
int cnt[2] = { 0 };
int res = 0;
for (int i = 0; i < s.length(); ++i) {
int num = s[i] - '0';
if (i == 0 || s[i] != s[i - 1])
cnt[num] = 0;
++cnt[num];
if (cnt[num] <= cnt[1 - num])
++res;
}
return res;
}
};
main(){
Solution ob;
cout << (ob.countBinarySubstrings("11001100"));
} 입력
"11001100"
출력
6