有效的括号
发表于更新于
字数总计:461阅读时长:1分钟阅读量: 南京
有效的括号
LeetCode 第 20 题 简单题
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例1
输入:s = “()”
输出:true
示例2
输入:s = “()[]{}”
输出:true
示例3
输入:s = “(]”
输出:false
查看提示
1 <= s.length <= 104
s
仅由括号 '()[]{}'
组成
栈解题思路
用 map 去记录对应的括号匹配情况
循环字符串
栈为空,或 top 元素不为对应的匹配值,将这个括号压入栈
top 元素和当前括号匹配上就出栈
栈为空就说明括号是闭合的,不为空说明不匹配,有可能是顺序问题,也可能是数量问题
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) { if (s.length() % 2 != 0) { return false; } Map<Character, Character> map = new HashMap<Character, Character>() {{ put(')', '('); put(']', '['); put('}', '{'); }};
Stack<Character> stack = new Stack<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (!(map.containsKey(c) || map.containsValue(c))) { return false; } else { if (stack.isEmpty() || stack.peek() != map.get(c)) { stack.push(c); } else { stack.pop(); } } } return stack.isEmpty(); } }
|