개발 일지
316. Remove Duplicate Letters (중복된 글자 제거) 본문
이진 문자열 s에서도 0과 1의 개수가 같은 비어 있지 않은 서브스트링의 개수를 반환하고, 이러한 서브스트링의 모든 0과 1이 연속적으로 그룹화됩니다.
여러 번 발생하는 서브스트레이트는 발생 횟수로 계산됩니다.
예시 1:
입력: s = "00110011"
출력: 6
설명: 연속 1과 0의 개수가 같은 6개의 서브스트레이트가 있습니다: "0011", "01", "1100", "10", "0011", "01"입니다.
이러한 서브스트링 중 일부는 반복되며 발생 횟수로 계산됩니다.
또한 "00110011"은 모든 0(및 1)이 함께 그룹화되지 않았기 때문에 유효한 하위 문자열이 아닙니다.
예시 2:
입력: s = "10101"
출력: 4
설명: "10", "01", "10", "01"은 연속 1과 0의 개수가 같은 4개의 서브스트링이 있습니다.
조건:
- 1 <= s.length <= 10^5
- s[i] is either '0' or '1'.
정답:
public class Solution {
public int CountBinarySubstrings(string s) {
int result = 0;
int count = 1;
int check = 1;
for (int i = 1; i < s.Length; i++)
{
if (s[i] == s[i - 1])
{
count += 1;
}
else
{
check = count;
count = 1;
}
if (check >= count)
{
result += 1;
}
}
return result;
}
}
해설: count는 동일한 숫자일 경우에 갯수를 추가하고 숫자가 바뀔 때 해당 count를 check에 넘겨준 이후 count는 1로 초기화해줍니다.
넘겨받은 check가 바뀐 숫자인 count보다 동일하거나 크다면 계속 반복되고 있다는 경우이므로 check가 끝날때까지 result를 더해준 후 return해줍니다.
'코딩 테스트 > LeetCode' 카테고리의 다른 글
905. Sort Array By Parity (짝수에 따른 배열 정렬) (0) | 2024.09.26 |
---|---|
908. Smallest Range I (최소 범위 I) (0) | 2024.09.26 |
316. Remove Duplicate Letters (중복된 글자 제거) (1) | 2024.09.26 |
242. Valid Anagram (유효한 애너그램) (3) | 2024.09.25 |
258. Add Digits (숫자 더하기) (0) | 2024.09.25 |