박종훈 알고리즘 블로그

(Leetcode) 20 - Valid Parentheses

New Year Gift - Curated List of Top 75 LeetCode Questions to Save Your Time

위 링크에 있는 추천 문제들을 시간이 있을때마다 풀어보려고 한다.


https://leetcode.com/problems/valid-parentheses/description/


어렵지 않은 문제이다.

내가 작성한 풀이

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();

        for (char c : s.toCharArray()) {
            if (c == '(' || c == '{' || c == '[') {
                stack.push(c);
                continue;
            }

            if (stack.isEmpty()) {
                return false;
            }

            boolean valid = false;
            if (c == ')') {
                valid = stack.peek() == '('
            } else if (c == '}') {
                valid = stack.peek() == '{';
            } else if (c == ']') {
                valid = stack.peek() == '[';
            }

            if (valid) {
                stack.pop();
            } else {
                return false;
            }
        }

        return stack.isEmpty();
    }
}

괄호가 시작 된 후 순서에 따라 닫히는지에 대해서만 잘 케어해주면 해결되는 문제이다.

TC, SC

시간 복잡도는 O(n)이고, 공간 복잡도는 O(n)이다.