【刷题】有效的括号

简介: 【刷题】有效的括号

题目描述


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


有效字符串需满足:


左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。


示例


示例 1:

输入:s = "()"
输出:true

示例 2:

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

示例 3:

输入:s = "(]"
输出:false

示例 4:

输入:s = "([)]"
输出:false

示例 5:

输入:s = "{[]}"
输出:true

提示:


1 <= s.length <= 104

s 仅由括号 '()[]{}' 组成


解题思路


  1. 看到题之后考虑到的就是匹配问题,即最内部的括号一定是左右相对称的,但是外部的括号不一定,因为外部的括号内不一定包含了几个成对存在的括号
  2. 既然是成对出现的,那么如果输入的字符串是奇数的长度,直接return false
  3. 声明map,以右括号为key,左括号为value,方便我们在循环遍历的时候判断赋值
  4. 声明一个存储元素用的切片a
  5. 当遍历的元素是左括号时,把元素追加到切片a中
  6. 当遍历的元素是右括号且切片a不为空(为空肯定不对啦,右括号需要左括号闭合呀)且切片a中最后一个元素是对应的左括号,说明满足匹配条件,重置切片a的值;否则的话说明不符合预制要求,return false
  7. 当循环结束后,如果切片a的为空(遍历匹配后重置了切片a的值)说明符合要求返回true;否则返回false。


AC代码


func isValid(s string) bool {
    if len(s) % 2 == 1 { return false }
    m := map[byte]byte{
        ')':'(',
        ']':'[',
        '}':'{',
    }
    a := make([]byte, 0, len(s)/2)
    for _, b := range []byte(s){
        if b == '(' || b == '{' || b == '['{
            a = append(a, b)
            continue
        }
        if b == ')' || b == '}' || b == ']'{
            if len(a) >0 && m[b] == a[len(a)-1]{
                a = a[:len(a)-1]
                continue
            }else {
                return false
            }
        }
    }
    if len(a) == 0 {
        return true
    }else {
        return false
    }
}


运行结果


微信图片_20221112161230.jpg


相关文章
|
3月前
|
算法
LeetCode第22题括号生成
该文章介绍了 LeetCode 第 22 题括号生成的解法,通过回溯算法生成所有可能的括号组合,在递归过程中根据左右括号数量的条件进行剪枝,从而得到有效的括号组合。
LeetCode第22题括号生成
LeetCode | 20. 有效的括号
LeetCode | 20. 有效的括号
LeetCode:有效的括号
LeetCode:有效的括号
50 0
|
6月前
leetcode:20. 有效的括号
leetcode:20. 有效的括号
29 0
|
6月前
leetcode-22:括号生成
leetcode-22:括号生成
30 0
|
6月前
|
算法
面试题 08.09:括号
面试题 08.09:括号
27 0
|
算法 程序员 编译器
力扣刷题-有效的括号
力扣刷题-有效的括号
leetcode:20.有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
62 0