题解 | #括号序列#
括号序列
http://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2
import java.util.LinkedList; import java.util.Stack; /** * @ClassName Solution * @Description TODO * @Author ylr * @Date 2021/7/21 11:03 * @Version 1.0 */ public class Solution { //开始和结束标识 private static char[] start = {'(', '{', '['}; private static char[] end = {')', '}', ']'}; //判断t在开始集中并返回下标 private int inStart(char t) { for (int i = 0; i <start.length ; i++) { if (start[i]==t) return i; } return -1; } //判断t在结束集中并返回下标 private int inEnd(char t) { for (int i = 0; i <end.length ; i++) { if (end[i]==t) return i; } return -1; } private Stack<Character> stack = new Stack<>(); public boolean isValid(String s) { int length = s.length(); /*如果长度小于1或者第一个字符是结束符 返回false*/ if (length<=1||inEnd(s.charAt(0))>=0) return false; int i = 0; while (i < length) { char c = s.charAt(i); /*遍历判断是否在开始集中,在开始集中就入栈,不在就去匹配*/ if (inStart(c)>=0) { stack.push(c); } else { /*匹配 如果栈为空就说明没有匹配对象返回false*/ if (stack.isEmpty()) return false; /*匹配 开始下标和结束下标是否一样 一样跳过否则返回false*/ if (!stack.isEmpty()&&inEnd(c) == inStart(stack.peek())) { stack.pop(); } else return false; } i++; } /*最后 判断一下栈是否为空 为空匹配完成返回true否则匹配出错返回false*/ return stack.isEmpty(); } public static void main(String[] args) { System.out.println(new Solution().isValid("((")); } }