牛课题霸每日一题NC52题解Java8版本
题目描述
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
解题思路
括号匹配问题考虑栈结构来实现。合法的串左右括号都是成对出现,或者嵌套出现。
使用栈存储左括号,当遇到左括号则入栈,遇到右括号则出栈,检测弹出的左括号是否与当前右括号匹配,如果不匹配则不合法,如果匹配则继续检测下一个括号。
import java.util.*; public class Solution { /** * * @param s string字符串 * @return bool布尔型 */ public boolean isValid (String s) { // write code here Deque<Character> stack = new LinkedList<>(); for(char ch: s.toCharArray()){ if(ch == '(' || ch == '{' || ch == '['){ stack.offerLast(ch); }else{ Character top = stack.pollLast(); if(top == null){ return false; } if((ch == '}' && top == '{') || (ch == ']' && top == '[') || (ch == ')' && top == '(')){ continue; }else{ return false; } } } return stack.isEmpty(); } }