-->20. 有效的括号
这个也是栈的应用经典问题
输入:s = "( )" 输出:true 输入:s = "( )[ ]{ }" 输出:true
输入:s = "( ]" 输出:false 输入:s = "( [ ) ]" 输出:false
输入:s = "{ [ ] }" 输出:true
这个题就是一共有三种括号【】{} ()然后这三个可以混合也可以不混合,看是否是匹配的?
思路:
左括号都入栈,然后看遍历的字符是否与其匹配,如果匹配将栈顶左括号弹出继续遍历,如果最后栈中还有元素,或者还有没遍历完的字符串但栈已经为空都是不匹配的

- class Solution {
- public boolean isValid(String s) {
- //如果是左括号就入栈
- Stack<Character> stack = new Stack<>();
- for(int i =0;i<s.length();++i){
- //如果是左括号就入栈
- if(s.charAt(i)=='('||s.charAt(i)=='['
- ||s.charAt(i)=='{'){
- stack.push(s.charAt(i));
- }else {
- //如果不是右括号那就要与栈顶元素进行比较
- if(stack.empty()){
- //如果栈为空,无法比较
- return false;
- }else {
- //栈不为空看是否是匹配的情况
- if((stack.peek()=='('&&s.charAt(i)==')')
- ||(stack.peek()=='{'&&s.charAt(i)=='}')||
- (stack.peek()=='['&&s.charAt(i)==']')){
- stack.pop();
- }else {
- //如果相等弹出栈顶元素
- return false;
- }
- }
- }
- }
- return stack.empty();
- }
- }