题目
- 原题连接:20. 有效的括号
1- 思路
模式识别
- 模式1:括号左右匹配 ——> 借助栈来实现 ——>
Deque<Character> deque = new LinkedList<>()
- 模式2:顺序匹配 ——> 用
if
判断
具体思路
- 1.遇到左括号
- 直接入栈相应的右括号
- 2.不匹配情况
- **① 左括号多:**此时 栈
deque.isEmpty()
,因此该条件下返回false
- ② 括号相等但括号顺序不对:此时
s.charAt(i) != deque.poll()
,因此此条件下返回false
- ③ 右括号多:此时 在遍历完
deque
之后,deque.isEmpty()
结果为false
- **① 左括号多:**此时 栈
2- 实现
⭐20. 有效的括号——题解思路
class Solution {public boolean isValid(String s) {Deque<Character> st = new LinkedList<>();for (int i = 0; i < s.length(); i++) {if (s.charAt(i) == '(') {st.push(')');} else if (s.charAt(i) == '{') {st.push('}');} else if (s.charAt(i) == '[') {st.push(']');} else if (st.isEmpty() || s.charAt(i) != st.peek()) {return false;} else {st.pop();}}return st.isEmpty();}}
3- ACM实现
public class isValid {public static boolean isValid(String s){int n = s.length();Deque<Character> deque = new LinkedList<>();for(int i = 0 ; i < n;i++){if(s.charAt(i)=='['){deque.add(']');}else if(s.charAt(i) == '{'){deque.add('}');}else if(s.charAt(i) == '('){deque.add(')');}else if(deque.isEmpty() || s.charAt(i) != deque.peek()){return false;}else{deque.pop();}}return deque.isEmpty();}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入括号字符串");String str = sc.nextLine();System.out.println("是否为有效括号"+isValid(str));}
}