有效的括号(简单)

有效的括号

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

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true
示例 2:

输入:s = "()[]{}"

输出:true
示例 3:

输入:s = "(]"

输出:false

思想:

1.使用栈(Stack)数据结构:算法通过使用一个栈来处理括号的匹配。当遇到左括号时,将其压入栈中;当遇到右括号时,检查栈顶部的元素是否与之匹配。如果匹配,则从栈中弹出该左括号,继续遍历输入字符串;如果不匹配或者栈为空,则返回 false。

2.使用哈希映射(HashMap)存储括号对应关系:在代码中,使用 HashMap 存储左括号和右括号的对应关系。这样在检查括号匹配时,可以通过查询 HashMap 来确定对应的右括号。

3.遍历输入字符串:算法遍历输入的字符串,对于字符串中的每个字符执行以下操作:

  • 如果遇到左括号,将其压入栈中。
  • 如果遇到右括号,检查栈顶部元素是否与之匹配:如果匹配,弹出该左括号;如果不匹配或者栈为空,则返回 false。
  • 遍历完成后,检查栈是否为空,为空则说明所有括号都匹配,返回 true;否则说明括号未完全匹配,返回 false。
  • 最终返回是否栈为空:最后的返回值是检查栈是否为空,如果栈为空,则说明所有左括号都已经找到相匹配的右括号,括号序列有效;否则说明括号序列存在不匹配,返回 false。

这个算法的时间复杂度是O(n),其中n是输入字符串s的长度,因为算法需要遍历整个输入字符串一次。这个算法是一种常见的用栈解决括号匹配问题的经典算法。

题解

java 复制代码
class Solution {
    public boolean isValid(String s) {
       Stack<Character> stack = new Stack<>();
       HashMap<Character,Character> map = new HashMap<>();
       map.put('(',')');
       map.put('{','}');
       map.put('[',']');

       for(char c:s.toCharArray())
       {
        if(map.containsKey(c))
        {
            stack.push(c);
        }
        else if(stack.isEmpty() || map.get(stack.peek())!=c)
        {
            return false;
        }
        else
        stack.pop();
       }

       return stack.isEmpty();
    }
}
相关推荐
api茶飘香1 小时前
守护应用边界:通过反射API实现安全的输入输出过滤
java·开发语言·python·安全·django·virtualenv·pygame
杀死一只知更鸟debug1 小时前
策略模式的小记
java·开发语言·策略模式
nice666601 小时前
CSS的基本语法
java·前端·css·visual studio code
七十二五1 小时前
matlab数据批量保存为excel,文件名,行和列的名称设置
经验分享·算法·matlab·青少年编程·矩阵·excel
efls1111 小时前
Qt_了解Qt Creator
开发语言·qt
请揣满RMB1 小时前
Qt常用控件——QRadioButton和QCheckBox
开发语言·c++·qt
阿巴~阿巴~1 小时前
C_深入理解指针(五) —— sizeof和strlen的对比、数组和指针笔试题解析、指针运算笔试题解析
c语言·开发语言·数据结构·算法
爱吃桃子的ICer2 小时前
[UVM]3.核心基类 uvm_object 域的自动化 copy() compare() print() pack unpack
开发语言·前端·ic设计
爱吃龙利鱼2 小时前
web群集--nginx常见的几种负载均衡调度算法的配置过程和效果展示
运维·算法·nginx·云原生·负载均衡
ever_up9733 小时前
EasyExcel的导入与导出及在实际项目生产场景的一下应用例子
java·开发语言·数据库