首页 > 其他分享 >08_ 有效的括号

08_ 有效的括号

时间:2023-10-11 09:22:07浏览次数:31  
标签:ch return 有效 08 括号 匹配 false stack

有效的括号

【题目】

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。
    【思路分析】

第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false

第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false

第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false

如何判断左括号和右括号都全匹配了呢?

即字符串遍历完之后,栈为空,就说明全都匹配上了。

小tips:

在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶不相等就可以了,比左括号先入栈代码要简单一些!
代码实现如下:

class Solution {
    public boolean isValid(String s) {
        // 判断给定字符串s的长度,若s.length()为奇数,则直接返回false
        if (s.length() % 2 != 0) 
            return false;
        Stack<Character> stack = new Stack<Character>();
        // 思路:左括号入栈,右括号则将栈中的左括号出栈与之消消乐
        char ch;
        for (int i = 0; i < s.length(); i++) {
            ch = s.charAt(i);
            if (ch == '(') {
                stack.push(')');
            } else if (ch == '[') {
                stack.push(']');
            } else if (ch == '{') {
                stack.push('}');
                //空栈或者当前栈中的栈顶元素(一定是个右括号)与当前右括号不匹配
            } else if (stack.isEmpty() || stack.peek() != ch){
                return false;
            } else {
                stack.pop();
            }
        }
        // 最后栈是空的,则表示括号都匹配成功了,返回true
        return stack.isEmpty();
    }
}

标签:ch,return,有效,08,括号,匹配,false,stack
From: https://www.cnblogs.com/codingbao/p/17756249.html

相关文章

  • LY1376 [ 20231008 NOIP 模拟赛 T0 ] 递增路径
    题意\(A\),\(B\)两人轮流在一张图上移动一个点。要求这次移动的边权必须大于上次的。\(A\)希望游戏进行的轮数多,\(B\)希望游戏进行的轮数少。对于每个\(s=1,2,...,n\)作为起点,若双方都采用最优策略,游戏会进行多少轮。Sol考虑将所有边按照从大到小的顺序排序。每......
  • 最新版Typora激活破解教程,永久使用亲测有效
    Typora是一款简单易用的Markdown编辑器。受到大量程序员的喜爱和使用今天就分享一个激活Typora方法的教程windows,mac版都可以使用一、下载解压下载安装包和补丁包,进行解压  安装包补丁和使用方式......
  • [CF1508D] Swap Pass
    D-SwapPass先将所有\(a_i==i\)的点都直接去掉考虑将\(i\)向\(a_i\)连边,那么就会形成一个个的环考虑只有一个环的情况,那么我们任意固定一个点\(x\),一直交换\(a_x\)与\(a_{a_x}\)直到\(a_x==x\),因为所有所有边都交于一点,所以这肯定是合法的但更普遍的情况是不止有一个环,那么......
  • KBU808-ASEMI小功率开关电源KBU808
    编辑:llKBU808-ASEMI小功率开关电源KBU808型号:KBU808品牌:ASEMI芯片个数:4封装:GBU-4恢复时间:>50ns工作温度:-55°C~150°C浪涌电流:200A正向电流:8A反向耐压:800V正向压降:1.10V引脚数量:4KBU808特性:ASEMI品牌KBU808是采用工艺芯片,该芯片具有良好的稳定性及抗冲击能力,能够持续......
  • Tita OKR:在 1 小时内掌握写好有效 OKR 的技巧
    OKR到底是什么?Tita-OKR和新绩效一体化管理平台在深入了解之前,让我们先快速回顾一下什么是OKRs:目标是您雄心勃勃的定性目标,而关键成果则是可量化、可衡量的结果,用于说明您是否实现了这些目标。OKRs提供了清晰度、一致性和专注度,推动团队朝着共同的目标前进在创纪录的时间......
  • shell_条件判断_[]中括号
    条件测试条件测试[]中括号脚本中经常进行条件测试,用的最多的,都是中括号[]test和[]中括号的作用是意义的;只是中括号[],前后的空格必须有注意!!!中括号[],前后的空格必须有在条件测试中使用变量,必须添加双引号[-n"${filename}"][root@localhosttmp]#[-f"$......
  • visio调整画布大小和画大括号
    一、visio调整画布大小第一步,打开Visio,并新建一个空白文档。第二步,按住“Ctrl”键,将光标移到画布的边缘或者四角处,就可以看到光标变成了两边都有箭头的黑色光标了,然后移动鼠标,就可以改变画布的大小了。二、visio画大括号在Visio文档中,依次点击“文件(File)”—“形状(Shapes)”--......
  • 企业专属Chatbot,提高效率和生产力的有效工具
    在当今快节奏的商业环境中,迅速的回应对于保持客户满意至关重要。传统的沟通方法往往因为人力限制(如可用性或工作量)而产生延迟。不过呢,通过企业专属Chatbot,企业可以有效解决这些问题,提供全天候的即时回应,是有效提高企业工作效率和生产力的绝佳工具。 |提高响应时间和可用性企业专......
  • 提升测试能力的有效培训策略指南
    进行测试培训的目的是提高测试团队的知识面和技能,以达到改进测试质量和效率的目标。为此,企业需要设计和实施系统有效的测试培训计划。确定培训目的与需求分析测试管理人员应当根据团队现状和知识结构,分析出当前最需要加强的知识或技能,作为培训的重点。具体来说,可以从以下几个方......
  • 有效解决VC++6.0一个工程不能有多个main函数的解决方案
    对于初学者来说,需要做很多练习,就需要创建多个main()函数,但C语言只能有一个main()函数,那么通常的做法就是:【方法一】:讲其他文件中的main()函数注释掉,但该方法比较费时费力,不推荐【方法二】:在VC++6.0中,在工程左边fileview里工程下的sourcefiles中,选中前一个带main函数的文件, ......