20_有效的括号

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();
    }
}

 

上一篇:深度优先查找之迷宫问题


下一篇:150_逆波兰表达式求值