有效的括号(简单)

有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 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();
    }
}
相关推荐
喜欢吃燃面2 分钟前
C++算法竞赛:位运算
开发语言·c++·学习·算法
草莓熊Lotso5 分钟前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
开发语言·c++·经验分享·笔记·其他
水痕016 分钟前
gin结合minio来做文件存储
java·eureka·gin
谱写秋天12 分钟前
Qt 5.5 的安装与配置(使用 VSCode编辑)
开发语言·vscode·qt
项目申报小狂人13 分钟前
算法应用上新!自适应更新策略差分进化算法求解球形多飞行器路径规划问题,附完整MATLAB代码
开发语言·算法·matlab
寒士obj15 分钟前
Spring事物
java·spring
柯南二号1 小时前
【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略
java·spring boot·mybatis
阿珊和她的猫4 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript