LeetCode 0020 Valid Parentheses
阿新 • • 發佈:2022-03-09
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(); } }