1、栈,LIFO-后进先出数据结构。
/** * 给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。 * 有效字符串需满足: * 左括号必须用相同类型的右括号闭合。 * 左括号必须以正确的顺序闭合。 * * 示例 1: * 输入:s = "()" * 输出:true * * 输入:s = "(]" * 输出:false * * 提示: * 1 <= s.length <= 104 * s 仅由括号 '()[]{}' 组成 */ public static boolean isValid(String s) { if (s == null || s.equals("")) { return false; } char[] sign = s.toCharArray(); Stack<Character> stack = new Stack<>(); for (char item : sign) { switch (item) { case ')': if (!stack.empty() && '(' == stack.peek()) { //peek() 只返回栈顶元素,不删除 stack.pop(); //pop() 返回栈顶元素,并删除 } else { return false; } break; case ']': if (!stack.empty() && '[' == stack.peek()) { stack.pop(); } else { return false; } break; case '}': if (!stack.empty() && '{' == stack.peek()) { stack.pop(); } else { return false; } break; default: stack.push(item); //往栈顶放元素 break; } } if (stack.size() > 0) { return false; } return true; }