Leetcode Java Minimum Remove to Make Valid Parentheses
업데이트:
문제
코드
class Solution {
public String minRemoveToMakeValid(String s) {
char[] charArray = s.toCharArray();
int open = 0;
for (int i = 0; i < charArray.length; i++) {
switch (charArray[i]) {
case '(': open++; break;
case ')':
if (open == 0) {
charArray[i] = '.';
} else {
open--;
}
break;
default: break;
}
}
for (int i = charArray.length - 1; i >= 0; i--) {
if (open > 0 && charArray[i] == '(') {
charArray[i] = '.';
open--;
}
}
StringBuilder sb = new StringBuilder();
for (char c : charArray) {
if (c != '.') {
sb.append(c);
}
}
return sb.toString();
}
}
결과
설명
- ’(‘, ‘)’, 영소문자로 이루어진 s를 이용하여 아래의 규칙을 만족하는 유효한 문자열을 반환하는 문제이다.
- 결과 문자열의 괄호가 유효하도록 ‘(‘, ‘)’를 최소한 제거할 수 있다.
- 괄호 문자열은 아래의 경우에 유효하다.
- 빈 문자열 혹은 영소문자로 이루어진 문자열.
- A와 B 문자열이 이어진 AB 문자열.
- (A)로 표기된 A가 유효한 문자열.
- 문제 풀이에 필요한 변수를 정의한다.
- charArray는 문자열 s를 문자 배열로 변환하여 저장한 변수이다.
- open은 ‘(‘ 문자의 갯수를 계산할 변수로, 0으로 초기화한다.
- 0부터 charArray의 길이 미만까지 i를 증가시키며, 문자열 s의 좌측에서 우측으로 아래를 반복하여 괄호를 검증한다.
- charArray[i]의 문자에 따라 아래를 수행한다.
- ’(‘ 문자의 경우, open을 증가시킨다.
- ’)’ 문자의 경우, open이 0인 경우 charArray[i]에 ‘.’ 문자를 넣어 제거해준다.
- 그 외의 경우, 반복을 계속 수행한다.
- charArray[i]의 문자에 따라 아래를 수행한다.
- charArray의 길이보다 1 작은 값부터 0이상일 때 까지 i를 감소시키며, 문자열 s의 우측에서 좌측으로 아래를 반복하여 괄호를 재 검증한다.
- open이 0 초과이면서 charArray[i]의 문자가 ‘(‘인 경우, charArray[i]에 ‘.’ 문자를 넣어 제거하고 open을 감소시킨다.
- charArray에서 ‘.’ 문자를 제거한 문자들을 StringBuilder를 통해 동적으로 문자열로 만들어 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기