22, 20. 有效的括号
思路1: 通过栈直接处理即可
package com.shangguigu.dachang.algrithm.A07_queue_and_stack;
import java.util.Stack;
/**
* @author : 不二
* @date : 2022/4/16-上午10:42
* @desc : 20. 有效的括号
* https://leetcode-cn.com/problems/valid-parentheses/
*
**/
public class A72_isValid {
public static void main(String[] args) {
// String s = "()[]{}";
String s = "[";
// String s = "({{{{}}}))";
// boolean valid = isValid(s);
boolean valid = isValid_v1(s);
System.out.println("结果是:" + valid);
}
/*public static boolean isValid_v2(String s) {
Stack<Character> characters = new Stack<>();
boolean isValid = false;
for (int i = 0; i < s.length(); i++) {
}
return true;
}*/
// 这个也不对, 换个思路把
public static boolean isValid_v1(String s) {
Stack<Character> characters = new Stack<>();
for (int i = 0; i < s.length(); i++) {
// 如果是左括号,才需要放进栈中, 然后接着遍历
if ("({[".contains(s.charAt(i) + "")) {
characters.push(s.charAt(i));
continue;
}
// 如果是右括号,查找最上是否是对应的 左括号,如果是,则弹出, 如果不是,直接返回false
if (')' == s.charAt(i) && !characters.isEmpty() && characters.peek() == '(') {
characters.pop();
} else if ('}' == s.charAt(i) && !characters.isEmpty() && characters.peek() == '{') {
characters.pop();
} else if (']' == s.charAt(i) && !characters.isEmpty() && characters.peek() == '[') {
characters.pop();
} else {
return false;
}
}
// 遍历结束后,如果栈中全部弹出,则为true,否则为false
if (!characters.isEmpty()) {
return false;
} else {
return true;
}
}
}