有效的括号(栈)–HashMap
题目:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
思路:文中判断左括号和右括号匹配,一一对应的关系,可以用HashMap存放数据
左括号和右括号匹配的过程,可以用栈,栈是先进后出的特点。在遍历的过程中,遇到一个左括号,会期望后续遍历过程中,有一个相同类型的右括号将其闭合。后遇到的左括号要先闭合,可以将这个左括号放入栈中。
1.给定一个字符串,判断字符串的长度为奇数还是偶数,奇数直接返回false.
2.遇到一个右括号时,需要将一个相同类型的左括号闭合。取出栈顶的左括号判断它们是否是相同类型的括号。
3.如果不是相同类型,或者栈中并没有左括号,那么字符串s无效,返回False.
4.为了快速判断括号的类型,可以使用哈希映射(HashMap)存储每一中括号。哈希映射的键为右括号,值为相同类型的左括号。
5.遍历结束后,如果栈中没有左括号,说明将字符串s中的所有左括号闭合,返回True,否则返回False.

复杂度分析:
时间复杂度:O(n),其中n是字符串s的长度。
空间复杂度:O(n+∣Σ∣),其中 Σ 表示字符集,本题中字符串只包含6种括号,∣Σ∣=6。栈中的字符数量为 O(n),而哈希映射使用的空间为 O(∣Σ∣),相加即可得到总空间复杂度。