有效的括号(简单)

有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 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();
    }
}
相关推荐
爱coding的橙子2 小时前
每日算法刷题 Day3 5.11:leetcode数组2道题,用时1h(有点慢)
算法·leetcode
Chase_Mos2 小时前
Spring 必会之微服务篇(1)
java·spring·微服务
码上淘金3 小时前
【Python】Python常用控制结构详解:条件判断、遍历与循环控制
开发语言·python
Brilliant Nemo3 小时前
四、SpringMVC实战:构建高效表述层框架
开发语言·python
格林威5 小时前
Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”
开发语言·c++·人工智能·数码相机·计算机视觉
小林学习编程5 小时前
SpringBoot校园失物招领信息平台
java·spring boot·后端
撸码到无法自拔5 小时前
docker常见命令
java·spring cloud·docker·容器·eureka
橙子199110165 小时前
在 Kotlin 中什么是委托属性,简要说说其使用场景和原理
android·开发语言·kotlin
androidwork5 小时前
Kotlin Android LeakCanary内存泄漏检测实战
android·开发语言·kotlin
heart000_15 小时前
IDEA 插件推荐:提升编程效率
java·ide·intellij-idea