'', '{', '}', '[', ']'만 포함된 문자열 s가 주어지면 문자열이 유효한지 확인합니다.
유효한 문자열을 충족해야 합니다:
- 왼쪽 대괄호는 같은 유형의 오른쪽 대괄호로 닫아야 합니다.
- 왼쪽 브래킷은 올바른 순서로 닫아야 합니다.
- 각 오른쪽 중괄호에는 같은 유형의 왼쪽 중괄호가 대응합니다.
예 1:
입력: s= "()"
출력: true
예 2:
입력: s= "()[]{}"
출력: true
예 3:
입력: s= "(]"
출력: false
팁:
- 1 <= s.length <= 104
- s는 괄호 '()[]{}'로만 구성됩니다.
'', ']', '}'를 만나면 처음부터 반복합니다.
트래버스에서 ')', ']', '}' 오른쪽 괄호를 만나면 스택이 비어 있는지 확인합니다:
스택이 비어 있으면 오른쪽 대괄호와 관련하여 왼쪽 대괄호가 사용되지 않았음을 의미하며 false를 반환합니다.
스택이 비어 있지 않아 스택의 맨 위 요소가 현재 오른쪽 대괄호와 같지 않으면 해당 오른쪽 대괄호에 해당하는 왼쪽 대괄호가 없음을 의미합니다.
스택이 비어 있는지 확인하기 위해 스택을 탐색한 후 비어 있지 않으면 false를 반환합니다.
public class Problem_0020_ValidParentheses {
public boolean isValid(String s) {
if (s == null || s.length() == 0) {
return true;
}
char[] str = s.toCharArray();
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length; i++) {
char cha = str[i];
if (cha == '(' || cha == '[' || cha == '{') {
stack.add(cha == '(' ? ')' : (cha == '[' ? ']' : '}'));
} else {
if (stack.isEmpty()) {
return false;
}
char last = stack.pop();
if (cha != last) {
return false;
}
}
}
return stack.isEmpty();
}
}





