20_有效的括号
package 栈; import java.util.HashMap; import java.util.Stack; /** * https://leetcode-cn.com/problems/valid-parentheses/ * * @author Huangyujun * */ public class _20_有效的括号 { // public boolean isValid(String s) { // //一般做法:成对替换成空字符串 // while(s.contains("{}") || s.contains("[]") || s.contains("()")) { // s = s.replace("{}", ""); // s = s.replace("()", ""); // s = s.replace("[]", ""); // } // return s.isEmpty(); // } //补充java: 字符串也是由一个个字符组成的 // String str = ...; // for(int i = 0; i < str.lenth(); i++) { // char c = str.charAt(i); // } //补充java: //字符串数组长度 (是其内部属性):length //字符串长度 (是其内部的方法):length() // private HashMap<Character,Character> map = new HashMap<>(); // public _20_有效的括号() { //细节:需要注意构造方法名的统一(跟力扣上的方法名进行统一,也可以通过搞成static变量,在static块中进行添加“词汇量”) // //添加字典“词汇量” // map.put('(', ')'); // map.put('[', ']'); // map.put('{', '}'); // } private static HashMap<Character,Character> map = new HashMap<>(); static { //添加字典“词汇量” map.put('(', ')'); map.put('[', ']'); map.put('{', '}'); } public boolean isValid(String s) { Stack<Character> stack = new Stack<Character>(); int len = s.length(); for(int i = 0; i < len; i++) { char c = s.charAt(i); if(c == '(' || c == '[' || c == '{') { stack.push(c); }else { //判断特殊情况,栈中无 左括号 if(stack.isEmpty()) return false; char left = stack.pop(); // ①if(left == '(' && c != ')') return false; // ②if(left == '[' && c != ']') return false; // ③if(left == '{' && c != '}') return false; //①②③通过map(字典)进行优化 if(c != map.get(left)) return false; } } return stack.isEmpty(); } }