一、题目
有效的括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
二、解题思路
思路一:堆栈
题目比较简单,很容易想到使用堆栈来解决该问题
- 将括号进行分类,分为左括号和右括号:‘{’、‘[’、‘(‘均为左括号,’}’、‘]’、')'为右括号
- 遍历字符串,如果为左括号,存入堆栈;如果为右括号,判断栈顶元素是否和该右括号匹配。此处匹配可以利用map来实现,示例如下:
validMap := map[byte]byte{
'}': '{',
']': '[',
')': '(',
}
此处将右括号定义为key,左括号定义为value的目的是:
在判断字符为右括号的同时直接将其对应的左括号取出,方便后续和栈顶元素进行匹配
- 如果不匹配直接返回false,表示该字符串无效&#