문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
이진 문자열 s가 주어졌을 때, 0과 1의 개수가 같고, 모든 0과 모든 1이 연속된 문자열들의 개수를 반환해라.
여러 번 나타나는 부분 문자열은 그 횟수만큼 계산한다.
#1
Input: s = "00110011"
Output: 6
Explanation:
연속된 1과 0의 개수가 같은 부분 문자열은 "0011", "01", "1100", "10", "0011", "01" 6개다. 이러한 부분 문자열 중 일부는 반복되며, 반복되는 횟수만큼 계산된다. 또한, "00110011"은 모든 0, 1이 연석되어 있지 않으므로 유효한 부분 문자열이 아니다.
#2
Input: s = "10101"
Output: 4
Explanation:
연속된 1과 0의 개수가 같은 부분 문자열은 "10", "01", "10", "01" 4개다.
class Solution {
public int countBinarySubstrings(String s) {
int cur = 1;
int pre = 0;
int res = 0;
for(int i = 1; i < s.length(); i++){
if(s.charAt(i) == s.charAt(i - 1)) cur++;
else{
res += Math.min(cur, pre);
pre = cur;
cur = 1;
}
}
return res + Math.min(cur, pre );
}
}