[LeetCode] Count Binary Substrings

아르당·2026년 2월 15일

LeetCode

목록 보기
152/213
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

이진 문자열 s가 주어졌을 때, 0과 1의 개수가 같고, 모든 0과 모든 1이 연속된 문자열들의 개수를 반환해라.

여러 번 나타나는 부분 문자열은 그 횟수만큼 계산한다.

Example

#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개다.

Constraints

  • 1 <= s.length <= 10^5
  • s[i]는 '0' 또는 '1'이 있다.

Solved

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 );
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글