有效的括号(简单)

有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 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();
    }
}
相关推荐
xingzhemengyou15 分钟前
Python GUI之tkinter-基础控件
开发语言·python
Brduino脑机接口技术答疑5 分钟前
TDCA 算法在 SSVEP 场景中的 Padding 技术:原理、应用与工程实现
人工智能·算法·机器学习·数据分析·脑机接口
一叶飘零_sweeeet6 分钟前
2025 实战复盘:物联网 + 数据检索融合项目的核心技术实现与心得
java·物联网·mqtt
挖矿大亨7 分钟前
C++中深拷贝与浅拷贝的原理
开发语言·c++·算法
发疯幼稚鬼7 分钟前
图的存储与拓扑排序
数据结构·算法·排序算法·拓扑学
崇山峻岭之间8 分钟前
Matlab学习记录16
开发语言·学习·matlab
码农水水9 分钟前
阿里Java面试被问:慢查询的优化方案
java·adb·面试
Bruce_kaizy14 分钟前
c++图论——生成树之Kruskal&Prim算法
c++·算法·图论
在屏幕前出油23 分钟前
Python面向对象编程基础——类、实例对象与内存空间
开发语言·python
222you25 分钟前
RuoYi-Vue3的项目搭建
java