0020
20. 有效的括号
题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
方法一
思路及算法
使用 栈 数据结构来解决问题。
栈的特点是先进后出,因此适合做对称匹配类的题目。
-
第一种情况,字符串里左方向的括号多余了 ,所以不匹配。
-
第二种情况,括号没有多余,但是 括号的类型没有匹配上。
-
第三种情况,字符串里右方向的括号多余了,所以不匹配。
class Solution { public boolean isValid(String s) { if(s.length() % 2 == 1){ return false; } Deque<Character> deque = new LinkedList<>(); char ch; for(int i = 0; i < s.length(); i++){ ch = s.charAt(i); if(ch == '(') deque.push(')'); else if (ch == '[') deque.push(']'); else if (ch == '{') deque.push('}'); // 第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号 return false // 第二种情况:遍历字符串匹配的过程中,发现栈里没有我们要匹配的字符。所以return false else if (deque.isEmpty() || deque.peek() != ch){ return false; } else{ deque.pop(); } } //第一种情况判断是否为空 return deque.isEmpty(); } }

浙公网安备 33010602011771号