[LeetCode 20] Valid Parentheses

Feb 27, 2020


[LeetCode 20] Valid Parentheses

문제 요약

괄호 문자(‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’, ‘]’)로만 이루어진 문자열이 주어졌을 때 해당 괄호 문자열은 유효한 문자열인지 확인하는 아주 유명한 문제.

풀이

열린 괄호를 만나면 스택에 저장하고 닫힌 괄호를 만나면 스택에 저장되어 있는, 즉 가장 최근에 열렸던 괄호와 짝이 맞는지를 검사하여 괄호 문자열의 유효성을 판별해준다. 괄호 문자열의 길이가 N이라면, O(N)의 시간복잡도를 갖는다.

코드

class Solution {
    public boolean isValid(String s) {
        Stack<Character> st = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(' || c == '{' || c == '[') st.push(c);
            else if (c == ')') {
                if (st.empty() || st.peek() != '(') return false;
                else st.pop();
            }
            else if (c == '}') {
                if (st.empty() || st.peek() != '{') return false;
                else st.pop();
            }
            else if (c == ']') {
                if (st.empty() || st.peek() != '[') return false;
                else st.pop();
            }
            else return false;
        }
        return st.empty() ? true : false;
    }
}