1. question: 有效的括号(简单) 给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-parentheses
示例 1:
示例 2:
示例 3:
示例 4:
示例 5:
提示:
1 2 1 <= s.length <= 104 s 仅由括号 '()[]{}' 组成
2. answers 这道题也是比较简单的,采用栈来做。遇到左括号,就入栈;遇到右括号,则弹栈,判断两个元素是否匹配。
这里要注意,不匹配有以下三种情况:
遍历完字符串,栈中有多余的元素(左括号多)
在遍历过程中,不匹配(括号不匹配)
在遍历的过程中,遇到右括号,但栈为空(右括号多)
代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 public class Solution_0027 { public static boolean isValid (String s) { if (s.length() % 2 != 0 ) { return false ; } List<Character> left = new ArrayList<>(); List<Character> right = new ArrayList<>(); left.add('(' ); left.add('{' ); left.add('[' ); right.add(')' ); right.add('}' ); right.add(']' ); Stack<Character> stack = new Stack<>(); char [] chars = s.toCharArray(); for (char c: chars) { if (left.contains(c)) { stack.push(c); } else { if (stack.isEmpty()) { return false ; } Character pop = stack.pop(); int i = right.indexOf(c); Character character = left.get(i); if (pop != character) return false ; } } return stack.isEmpty(); } public static void main (String[] args) { System.out.println(); String s = "}{" ; System.out.println(isValid(s)); } }
3. 备注 参考力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 (leetcode-cn.com) ,代码随想录 (programmercarl.com) 。