20. 有效的括号(简单,但值得多看)
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
思路:
这里判断括号合不合法,这里需要进行以下几步,这里用栈来做,没其他好办法
- 遇到左括号,入栈
- 栈空时遇到右括号,错
- 遇到右括号,匹配栈顶元素,如果可以匹配为同一个,则正确
- 当栈全空时,未报错则正确
代码:
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
| class Solution { public boolean isValid(String s) { HashMap<Character,Character> map = new HashMap<Character,Character>(); map.put(')','('); map.put(']','['); map.put('}','{'); Stack<Character> stack = new Stack<Character>(); for (int i = 0; i < s.length(); i++){ char c = s.charAt(i); if(!map.containsKey(c)) stack.push(c); else{ char Top1 = stack.empty()?'\0':stack.pop(); if(Top1!=map.get(c)) return false; } } return stack.isEmpty(); } }
|