1. 程式人生 > 其它 >LeetCode 0020 Valid Parentheses

LeetCode 0020 Valid Parentheses

原題傳送門

1. 題目描述

2. Solution 1

1、思路分析
遇到左括號認為優先順序低,入棧;遇到右括號,若棧空,不匹配,若棧頂元素不是對應的括號,不匹配,不然彈棧,繼續遍歷;遍歷完,棧不空,不匹配。

2、程式碼實現

package Q0099.Q0020ValidParentheses;

import java.util.ArrayDeque;
import java.util.Deque;

public class Solution1 {

    public boolean isValid(String s) {
        Deque<Character> brackets = new ArrayDeque<>();
        for (char c : s.toCharArray()) {
            if (c == '(' || c == '[' || c == '{') brackets.push(c);
            else if (c == ')') {
                if (brackets.isEmpty()) return false;
                else if (brackets.peek() == '(') brackets.pop();
                else return false;
            } else if (c == ']') {
                if (brackets.isEmpty()) return false;
                else if (brackets.peek() == '[') brackets.pop();
                else return false;
            } else if (c == '}') {
                if (brackets.isEmpty()) return false;
                else if (brackets.peek() == '{') brackets.pop();
                else return false;
            }
        }
        return brackets.isEmpty();
    }
}

3. Solution 2

1、思路分析
使用Map儲存匹配的括號,簡化程式碼。
2、程式碼實現

package Q0099.Q0020ValidParentheses;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.HashMap;
import java.util.Map;

public class Solution2 {

    public boolean isValid(String s) {
        Deque<Character> brackets = new ArrayDeque<>();
        Map<Character, Character> bracketMaps = new HashMap<>();
        bracketMaps.put(')', '(');
        bracketMaps.put(']', '[');
        bracketMaps.put('}', '{');
        for (char c : s.toCharArray()) {
            if (bracketMaps.containsValue(c)) brackets.push(c);  // 左括號 => 進棧
            else if (brackets.isEmpty() || bracketMaps.get(c) != brackets.pop()) return false;
        }
        return brackets.isEmpty();
    }
}

4. Solution 3

1、思路分析
遇到左括號,對應的右括號入棧;遇到右括號,棧空或棧頂元素與當前遍歷元素不相等,說明不匹配。
2、程式碼實現

package Q0099.Q0020ValidParentheses;

import java.util.ArrayDeque;
import java.util.Deque;

public class Solution3 {

    public boolean isValid(String s) {
        Deque<Character> stack = new ArrayDeque<>();
        for (char c : s.toCharArray()) {
            if ('(' == c) stack.push(')');
            else if ('[' == c) stack.push(']');
            else if ('{' == c) stack.push('}');
            else if (stack.isEmpty() || stack.pop() != c) return false;
        }
        return stack.isEmpty();
    }
}