zoukankan      html  css  js  c++  java
  • java---括号匹配

    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.Map;

    /*
    *括号匹配
    * 1.用栈实现,如果读取字符为左括号,入栈
    * 2.如果读取字符为右括号
    * 栈为空,返回false
    * 栈不为空,和栈顶比较,是否匹配,匹配出栈一次,不匹配返回false
    * 3.最后栈不为空,返回false,栈为空返回true
    */
    public class BracketMatch {
    /*
    *功能描述
    * @author lkr
    * @date 2019/3/3
    * @param str
    * @return 是否匹配
    */
    public static boolean isMatch(String str){
    //定义左右括号匹配关系
    Map<Character,Character> map = new HashMap<Character,Character>();
    map.put(')','(');
    map.put('}','{');
    map.put(']','[');

    int length = str.length();//字符串长度
    LinkedList<Character> stack = new LinkedList<Character>();
    for (int i = 0;i<length;i++){
    //如果为左括号,入栈
    if(map.containsValue(str.charAt(i))){
    stack.push(str.charAt(i));
    }
    //如果为右括号,判断栈是否为空
    if(map.containsKey(str.charAt(i))){
    if(stack.isEmpty()){
    return false;
    }
    else if (stack.peek() == map.get(str.charAt(i))){
    stack.pop();
    }
    else return false;
    }
    }
    //寻循环遍历完成判断栈是否为空
    //return stack.isEmpty()?true:false;
    if(stack.isEmpty()){
    return true;
    }
    else return false;

    }


    public static void main(String[] args){
    String str1 = "{[(2+4)+(3-5)/9]*4+1}*{[(2-4)+(3-5)*9]*(4+1)}";
    String str2 = "(){}";
    String str3 = "(){[}";
    String str4 = "(){[)}";
    System.out.println(isMatch(str1));
    System.out.println(isMatch(str2));
    System.out.println(isMatch(str3));
    System.out.println(isMatch(str4));

    }
    }
  • 相关阅读:
    01背包----简单DP
    小a的计算器
    BZOJ3160 万径人踪灭 【fft + manacher】
    BZOJ3527 [Zjoi2014]力 【fft】
    BZOJ2194 快速傅立叶之二 【fft】
    BZOJ2123 [Sdoi2013]森林 【主席树 + 启发式合并】
    BZOJ3720 Gty的妹子树 【树分块】
    洛谷P1822 魔法指纹 【分块打表】
    洛谷3396 哈希冲突 【分块】
    分块算法
  • 原文地址:https://www.cnblogs.com/turningli/p/10464108.html
Copyright © 2011-2022 走看看