精华内容
下载资源
问答
  • 括号匹配C语言

    2018-12-05 20:55:34
    3利用栈的操作实现括号匹配的检验。 .括号匹配算法思想 (1)出现的凡是“左括号”,则进栈; (2)出现的是“右括号”, 首先检查栈是否空? 若栈空,则表明该“右括号”多余 否则和栈顶元素比较? 若相...
  • 主要介绍了Python实现的括号匹配判断功能,涉及Python栈与列表的存储、遍历、判断等相关操作技巧,需要的朋友可以参考下
  • 使用顺序栈实现括号匹配
  • c++使用堆栈实现括号匹配问题
  • 括号匹配检测工具

    2016-04-08 10:02:50
    目前的工作需要写大量的、很长的、内含很多括号的表达式,需要一个括号匹配检测工具,于是就自己做了一个,也发上来分享一下。 使用说明: 1.将要检查的表达式复制到“请将要检查的表达式复制到该文件.txt”文件内...
  • 括号匹配的检验

    2019-03-24 17:32:03
    假设一个算术表达式中可以包含三种括号:园括号“(”和“)”、方括号“[”和“]”、花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用。编写判别给定表达式中所含括号是否正确配对出现的算法(已知表达式已...
  • 判断一个有左括号和右括号、以及其他ASCII字符组成的表达式是合法。...如果有*,则*可作为0个或者1个右括号,如果匹配则输出ok,不匹配则输出不匹配字符所在字符串中的具体位置。资源中包含详细源码+测试+visio流程图
  • C语言验证括号匹配

    2018-03-30 18:07:27
    在c语言下,利用栈的结构,判断一个表达式的括号是否合法
  • 数据结构实验-括号匹配的检验-链栈实现
  • 数据结构括号匹配

    2018-07-04 14:22:50
    数据结构试验代码 数据结构试验代码数据结构试验代码数据结构试验代码
  • 栈和队列括号匹配.cpp

    2020-03-19 13:48:29
    数据结构栈和队列的基本应用——括号匹配问题的设计与实现,使用C++实现,包括如何创建栈,进行括号匹配等,思路清晰。
  • 数据结构 c++ 链接栈+顺序对:括号匹配 数据结构 c++ 链接栈+顺序对:括号匹配
  • 括号匹配检验

    2018-05-14 20:29:45
    OJ作业题 8586 括号匹配检验,其实里面很多代码课本上都有的。
  • 本文实例讲述了Python实现求解括号匹配问题的方法。分享给大家供大家参考,具体如下: 这个在本科学习数据结构的时候已经接触很多了,主流的思想是借助栈的压入、弹出来进行匹配,至于python的话可以使用列表来完成...
  • (1)、括号匹配的算法设计 利用一个栈结构保存每个出现的左括号,当遇到右括号时,从栈中弹出左括号,检验匹配情况。在检验过程中,若遇到以下几种情况之一,就可以得出括号不匹配的结论。 (1)当遇到某一个右括号...
  • 括号匹配

    千次阅读 2020-10-24 10:07:17
    括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例1: 输入: "()" 输出: true 示例2: 输入: "()[]{}" 输出: true 示例3: 输入: ...

    题目

    给定一个只包括 '(', ')', '{', '}', '[', ']' 的字符串,判断字符串是否有效。

    有效字符串需满足:

    • 左括号必须用相同类型的右括号闭合。

    • 左括号必须以正确的顺序闭合。

    • 注意空字符串可被认为是有效字符串。

    示例 1:

    输入: "()"

    输出: true

    示例 2:

    输入: "()[]{}"

    输出: true

    示例 3:

    输入: "(]"

    输出: false

    示例 4:

    输入: "([)]" 输出: false

    示例 5:

    输入: "{[]}"

    输出: true

    LeetCode 地址:https://leetcode-cn.com/problems/valid-parentheses

    解题思路

    这道题考察的是就是验证括号的对称性,比如“([{}])”这种字符串就是正确的,应该返回 true,而“([{})]”这种字符串就是错误的,应该返回 false。

    从上面的题目可以看出,括号总共分为三类:小括号、中括号和大括号,那么我们可以利用栈先进后出的特性,将所有左边的括号(“(”、“[”、“{”)先入栈,然后再碰到右括号时,让它与栈顶的元素进行匹配,比如当遇到“)”时,如果栈顶是“(”,则说明匹配成功,栈顶元素出栈再继续字符串循环的流程,如果匹配错误就直接返回 false。

    假设我们要匹配字符串“(([]))”是否合法?那么执行流程就是这样的。

    首先遇到左边括号,先入栈:

    接下来又是左边括号,继续入栈:

    然后又是左边括号,继续入栈:

    接下来是右边括号,与栈顶元素匹配,“[]”为一对合法的括号,匹配成功栈顶元素出栈:

    接下来又是右边括号,与栈顶元素匹配,“()”为一对合法的括号,匹配成功栈顶元素出栈:

    接下来又是右边括号,与栈顶元素匹配,“()”为一对合法的括号,匹配成功栈顶元素出栈:

    当字符串循环结束并且栈为空栈时,则证明此字符串的括号匹配合法,最终的效果如下图所示:

    那么接下来我们就用代码来实现一下整个过程...

    实现代码一

    public boolean isValid(String s) {
        int slen = s.length(); // 括号的长度
        if (slen % 2 == 1) { // 括号不是成对出现直接返回 false
            return false;
        }
        // 把所有对比的括号存入 map,对比时用
        Map<Character, Character> map = new HashMap<>();
        map.put(')', '(');
        map.put('}', '{');
        map.put(']', '[');
        // 定义栈,用于存取括号(辅助比较)
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < slen; i++) { // 循环所有字符
            char c = s.charAt(i);
            if (map.containsKey(c)) { // 为右边的括号,如 ')'、'}' 等
                if (stack.isEmpty() || stack.peek() != map.get(c)) { // 栈为空或括号不匹配
                    return false;
                }
                stack.pop(); // 是一对括号,执行出栈(消除左右括号)
            } else { // 左边括号,直接入栈
                stack.push(c);
            }
        }
        return stack.isEmpty();
    }
    

    我们在 LeetCode 中提交一下代码,执行结果如下:

    代码解析

    以上代码的 map 集合是用于定义括号的匹配规则,比如“)”对应的匹配值是“(”,“]”的匹配值是“[”等,然后我们再去循环待验证的字符串,遇到左括号直接入栈,遇到右括号让它与栈顶元素匹配,等到整个字符串循环结束,如果栈为空则说明字符串的括号合法。

    复杂度分析

    时间复杂度:O(n),遍历了一遍整个字符串。空间复杂度:O(n)。

    实现代码二

    除了使用栈之外,我们还可以使用借助 Java 中的 replace 方法来实现,我们可以循环的消除字符串中的括号,比如将“()”或“[]”或“{}”循环得替换为空,最后在执行完成之后如果字符串为空,则说明字符串中的括号是合法的,具体实现代码如下:

    public boolean isValid(String s) {
            int len;
            do {
                len = s.length();
                // 消除成双成对的符号
                s = s.replace("()", "").replace("[]", "").
                        replace("{}", "");
            } while (len != s.length()); // 不能再进行替换了,replace 方法没有替换任何字符
            return s.length() == 0;
        }
    

    我们在 LeetCode 中提交一下代码,执行结果如下:

    从运行结果来看,二者的执行效率相差还是很明显的:

    总结

    本文我们讲了一道 bilibili 的笔试真题,同时它也是栈的经典面试题,我们可以借助栈的特性(先进后出)将所有的左括号入栈,当遇到右括号时让它与栈顶元素进行匹配,当字符串循环结束栈为空时,则说明此字符串的括号是合法的。当然我们在实际面试中,也可以使用 Java 的 replace 方法作为一个保底的实现方案,因为 replace 方法的实现相对更简单一些,只是性能不怎么好。

    展开全文
  • c++括号匹配

    2014-12-05 15:26:05
    c++括号匹配
  • 括号匹配-单链表

    2017-10-11 23:19:17
    以单链表作为数据结构 进行括号匹配,(数据结构的内容) 运行在visual studio 2017,
  • 利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式。输入一个包含上述括号的...
  • 利用循环链表实现的括号匹配,数据结构实验报告,适合新手,有程序运行截图
  • 括号匹配(栈)

    2018-04-20 09:41:31
    对输入的带括号的字符串进行括号匹配,能匹配()【】{},输出是否匹配
  • 括号匹配问题

    2016-04-10 13:33:44
    假设表达式中允许包含3种括号:圆括号,方括号和大括号。设计一个算法采用顺序栈判断表达式中的括号是否正确配对。
  • 主要介绍了python实现括号匹配及匹配格式的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了Java栈的应用之括号匹配算法,结合实例形式分析了Java使用栈实现括号匹配算法的相关原理、操作技巧与注意事项,需要的朋友可以参考下
  • 括号匹配算法

    2015-07-13 00:28:34
    C语言的括号匹配算法,用了栈,数据结构栈的应用的常用程序
  • 2、假设一个算术表达式中可以包含三种括号:园括号“(”和“)”、方括号“[”和“]”、花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用。编写判别给定表达式中所含括号是否正确配对出现的算法(已知表达式...
  • 括号匹配.cpp

    2019-07-11 16:34:11
    基于栈的一个针对括号匹配问题的解决方案
  • 利用栈实现括号匹配的检验,存储括号字符的数组通过malloc实现动态分配长度,匹配函数的第一个参数为指向字符的指针(即为存储括号字符的数组的首地址)和一个整数(即为括号字符的总数,为括号个数的2倍),将左...
  • C例子:括号匹配

    2015-07-18 16:47:05
    该程序是我写的博客“一起talk C栗子吧(第二十回:C语言实例--括号匹配)”的配套程序,共享给大家使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 319,710
精华内容 127,884
关键字:

括号匹配