1、题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
2、解析
- 方法:栈+哈希映射
- 第一步先进性字符串的判定如果字符串为基数,那么直接返回false
- 对括号进行哈希映射看到右括号我们再去对栈里的左括号进行匹配
- 首先遍历字符串中的括号左括号,看看输入哈希表的有无输出,如果没有输出就是左括号,执行压入栈,如果是右括号,则会输出左括号,与栈进行比对
- 时间复杂度:O(n),其中 n 是字符串 s 的长度。
- 空间复杂度:O(n +6),本题中字符串只包含 6种括号,|栈中的字符数量为 O(n),
3、代码
class Solution:
def isValid(self, s: str) -> bool:
if len(s) % 2 == 1:
return False
haxi = {")":"(","}":"{","]":"["}
z = list()
for i in s:
if i in haxi:
if not z or z[-1] != haxi[i]:
return False
z.pop()
else:
z.append(i)
return not z
4、结果
5、知识点总结
- 哈希映射:哈希映射的键为右括号,值为相同类型的左括号,输入与输出进行映射
- 字符串和栈用(),列表用[],not list(),判断栈是不是空