首页 > 其他分享 >stack实现括号匹配

stack实现括号匹配

时间:2023-12-15 20:45:13浏览次数:23  
标签:ch return 括号 匹配 false stack left

stack实现括号匹配

1.通过String类的内置函数置空string

public static boolean isValidByIf(String s){
while (s.contains("{}")||s.contains("[]")||s.contains("()")){
s=s.replace("{}","");
s=s.replace("[]","");
s=s.replace("()","");

    }
    return s.isEmpty();
}

2.通过stack实现

public static boolean isValidByStack(String s) {
       Stack<Character> stack = new Stack<>();
       char[] ch = s.toCharArray();
       for (int i = 0; i < ch.length; i++) {//遍历字符数组,是左括号入栈
           if (ch[i] == '(' || ch[i] == '[' || ch[i] == '{') {
               stack.push(ch[i]);
           } else {
//                右括号
               if (stack.isEmpty()) return false;//stack为空不存在左括号,只有右括号所有无效
//                弹出栈顶元素
               Character left = stack.pop();
               if (left == '(' && ch[i] != ')') return false;
               if (left == '{' && ch[i] != '}') return false;
               if (left == '[' && ch[i] != ']') return false;
           }
       }
//        stack为空,则括号匹配,有效,否则不为空,无效
       return stack.isEmpty();
   }

3.通过hashmap键值对的形式实现

 public static boolean isValidByHM(String s) {
        Stack<Character> stack = new Stack<>();
        char[] ch = s.toCharArray();
        for (int i = 0; i < ch.length; i++) {//遍历字符数组,是左括号入栈
            if (hashMap.containsKey(ch[i])) {
                stack.push(ch[i]);
            } else {
//                右括号
                if (stack.isEmpty()) return false;//stack为空不存在左括号,只有右括号所有无效
//                弹出栈顶元素
                Character left = stack.pop();
//                hashMap.get(left)根据栈弹出的left左括号get取值为对应的右括号,而ch[i]为右括号,不等则false
                if (ch[i]!=hashMap.get(left)) return false;
            }
        }
//        stack为空,则括号匹配,有效,否则不为空,无效
        return stack.isEmpty();
    }

标签:ch,return,括号,匹配,false,stack,left
From: https://www.cnblogs.com/mglblog/p/17904144.html

相关文章

  • 【kmp算法】字符串匹配
    一,解决问题kmp算法解决的是字符串匹配的问题,具体来说假定我们要在主串s[]中匹配模式串p[],找到匹配到的位置loc;二,具体实现和演变过程最自然的想法是暴力写法(BF)枚举主串字符s[i],和模式串p[j]。一个一个匹配,如果匹配失败,i指针回退回起点,往前进一位,再次进行比较,......
  • 容器网络Cilium:DualStack双栈特性分析
    本文分享自华为云社区《容器网络Cilium入门系列之DualStack双栈特性分析》,作者:可以交个朋友。一、关于IPV6/IPV4双栈目前很多公司开始将自己的业务由ipv4切换成ipv6,或者ipv4,ipv6共存。ipv4ipv6共存(DualStack)有两种方式:一个网卡上有两个IP地址,一个是ipv4,一个是ipv6。......
  • 未能加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项。找到的程序集清单定义
    原文链接:https://blog.csdn.net/weixin_45488182/article/details/132537085网上的资料,大都是因为版本号不一致,我检查了很多遍,我这边版本号是12.0.1与12.0.2,config里是12.0.0,应该算是一致的吧。并且清理重新生成后,就不会报这个错。程序可以正常运行了。今天终于解决了这个问题,......
  • 字符串匹配
    KMP算法Knuth-Morris-Pratt(KMP)算法用于搜索给定字符串中的模式。首先,它在模式中找到称为LPS的重复子串,并将LPS信息存储在数组中。其次,进行字符串匹配。当发生不匹配时,它利用LPS数组来决定从哪里开始下一个匹配,以避免多余的旧比较。如下图第一次匹配失败后,右移到已匹......
  • 对象的数据处理方法,要对对象属性进行数组操作(list数组中每一项与column数组中的valu
       //需要对对象属性进行数组操作时,使用Object.entries()方法    varlist=['V11046_052','V11046_051','V11046_50','V11046_0511'];    varcolumn=[{'观测时间':'D_DATETIME'},{'小时内极大风速出现时间':'V......
  • navicat链接oracle时报错,检查是否是oci.dll库不匹配的问题
     1:安装Oracle数据库,安装时类型选择共享服务器,不要选专享服务器。2:确定Oracle,Navicat,OracleClient的位数,确保你的oracle数据库的位数与navicat位数一致,即:32v32,64v643:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html,在这个页面下载和......
  • CTFpwnAD世界pwnstack题解及栈溢出两种解法
    问题的出现这题我刚看到时差点没笑出来,但是尝试了一次之后我就笑不出来了。这题给了back_door后门函数,但是如果直接覆盖返回到后门函数起始位置会出现栈溢出问题。到这一步都没有出现问题,而继续ni的话就会卡住。基本上这里看到xmm0就是栈对其问题了。出现问题原因很简单,linux系统一......
  • 网卡型号和Ubuntu 的驱动版本不匹配问题
    新组装的ubuntu18.04系统,前期插入网线无法识别到网络,主要原因应该是有线网卡驱动没有装 或 驱动型号不匹配。这里介绍一下怎么解决这个问题。若原来安装了驱动,首先要做的就是得把原来的驱动卸载掉。 1、查看网卡型号#查看网卡型号lspci|grepnet备注:网卡型号为RT......
  • 【双栈实现队列】Java——Stack类
    leetcode232.用栈实现队列题意:双栈实现队列;要求每个入队、出队操作均摊O(1)复杂度题解:用一个栈in维护入队元素,另一个栈out维护出队元素出队或取队头元素:首先判断栈out是否为空,如果为空,将栈in中的元素pop()到栈out中,那么栈out栈顶元素即为原队列队头元素。(米奇妙妙屋啊~)判断......
  • 将QWebEngineView添加到QStackedWidget或QTabWidget中导致切换按钮失效的解决方案
    问题描述:将QWebEngineView添加到QStackedWidget或QTabWidget中导致切换按钮失效,如果只有两个来回切的话,是没有问题的,当出现多个页面的时候,就会切换失灵。解决思路:将QWebEngineView浮到上面,只要实现大小、位置、显示隐藏与主页面同步即可。 QWebEngineView窗口构造窗口添加:se......