출처: leetcode.com/problems/split-a-string-in-balanced-strings/
문제
한글 번역은 아래 더보기를 클릭해주세요.
더보기
균형잡힌 문자열은 같은 수의 'L'과 'R' 문자를 갖고 있는 문자열이다.
균형잡힌 문자열 한 개가 주어졌을 때, 균형잡힌 문자열이 가장 많이 생기도록 쪼개라.
쪼개진 균형잡힌 문자열의 최댓값을 반환해라.
예제 1:
- 입력: s = "RLRRLLRLRL"
- 출력: 4
- 설명: s는 같은 수의 'R'과 'L'을 갖고 있는 부분문자열 "RL", "RRLL", "RL", "RL"로 쪼개진다.
예제 2:
- 입력: s = "RLLLLRRRLR"
- 출력: 3
- 설명: s는 같은 수의 'R'과 'L'을 갖고 있는 부분문자열 "RL", "LLLRRR", "LR"로 쪼개진다.
예제 3:
- 입력: s = "LLLLRRRR"
- 출력: 1
- 설명: s는 "LLLLRRRR"로 쪼개진다.
예제 4:
- 입력: s = "RLRRRLLRLL"
- 출력: 2
- 설명: s는 같은 수의 'R'과 'L'을 갖고 있는 부분문자열 "RL", "RRRLLRLL"로 쪼개진다.
제약조건:
- 1 <= s.length <= 1000
- s[i]는 'L' 이거나 'R'이다.
- s는 균형잡힌 문자열이다.
풀이
javascript
const balancedStringSplit = function (s) {
let answer = 0;
let rCount = 0;
// 균형잡힌 문자열을 순회하면서
for (let i = 0, len = s.length; i < len; i += 1) {
if (s[i] === 'R') {
rCount += 1;
} else {
rCount -= 1;
}
// L과 R의 갯수가 같아질 때 === 균형잡힌 부분문자열 발견함
// 정답 +1
if (rCount === 0) {
answer += 1;
}
}
return answer;
};
python
class Solution:
def balancedStringSplit(self, s: str) -> int:
answer = 0
rCount = 0
# 균형잡힌 문자열을 순회하면서
for c in s:
if c == 'R':
rCount += 1
else:
rCount -= 1
# L과 R의 갯수가 같아질 때 === 균형잡힌 부분문자열 발견함
# 정답 +1
if rCount == 0:
answer += 1
return answer
결과
'CS기초 > 코딩테스트' 카테고리의 다른 글
LeetCode 392 (Easy) Is Subsequence (0) | 2021.03.03 |
---|---|
LeetCode 1710 (Easy) Maximum Units on a Truck (0) | 2021.03.03 |
LeetCode 122 (Easy) Best Time to Buy and Sell Stock II (0) | 2021.03.03 |
LeetCode 1217 (Easy) Minimum Cost to Move Chips to The Same Position (0) | 2021.02.24 |
LeetCode 1725 (Easy) Number Of Rectangles That Can Form The Largest Square (0) | 2021.02.24 |