LC-20:有效的括号
LC-20:有效的括号
执行代码:
public class Demone { public static void main(String[] args) { System.out.println(isValid("()[]{}(")); } public static 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)); } // 如果是右边的括号,就将战中的括号弹出,进行对比 if (s.charAt(i) == ')') { if (stack.isEmpty()) {return false;} // 为了防止栈中少对应的括号,导致空栈问题 Character pop = stack.pop(); // 删除并返回 if (pop != '(') { return false; } } else if (s.charAt(i) == '}') { if (stack.isEmpty()) {return false;} // 为了防止栈中少对应的括号,导致空栈问题 Character pop = stack.pop(); // 删除并返回 if (pop != '{') { return false; } } else if (s.charAt(i) == ']') { if (stack.isEmpty()) {return false;} // 为了防止栈中少对应的括号,导致空栈问题 Character pop = stack.pop(); // 删除并返回 if (pop != '[') { return false; } } } // 如果栈中的数据不是null,就说明有多余的左括号。 if (!stack.isEmpty()) { return false; } return true; } }
这个题的本质就是使用stack栈实现对括号进行匹配,对字符串进行遍历,如果是左括号的话,就放在栈中,如果是右括号,就需要在栈中弹出来一个元素,进行对比,在取一个元素之前,就需要对栈中的元素进行判空,就是为了实现里面有多余的右括号,并且还要判断多余的左括号咋判断?左括号其实就是没有右括号的匹配了,也就是说它烂在了栈中,所以我们只需要对栈中的元素内容进行判断空即可,如果不是空,就说明里面还有多余的括号,就说明,不是合法的。