LeetCode20-有效的括号
作者:互联网
非商业,LeetCode链接附上:
https://leetcode-cn.com/problems/valid-parentheses/
进入正题。
题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例:
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
代码实现:
public boolean isValid(String s) { int len = s.length(); //字符串长度为奇数,确定不满足 if (len % 2 == 1) return false; //当有新的成对符号加入的时候,只需在这里面增加键值对 Map<Character, Character> pairs = new HashMap<>(); pairs.put(')', '('); pairs.put(']', '['); pairs.put('}', '{'); //双端队列,比Stack效率高 Deque<Character> stack = new LinkedList<>(); for (int i = 0; i < len; i++) { char ch = s.charAt(i); if (pairs.containsKey(ch)) { if (stack.isEmpty() || stack.peek() != pairs.get(ch)) { return false; } stack.pop(); } else { stack.push(ch); } } return stack.isEmpty(); } //时间复杂度O(n) //空间复杂度:O(n+∣Σ∣),其中 Σ 表示字符集,本题中字符串只包含 6 种括号,∣Σ∣=6
分析:
主要是利用栈的性质,额外的借助字符的哈希映射关系,把问题分解成几个部分。
当确定不满足的情况出现时即时终止。
--End
标签:pairs,ch,示例,LeetCode20,括号,字符串,有效,stack 来源: https://www.cnblogs.com/heibingtai/p/14017354.html