📅  最后修改于: 2023-12-03 15:12:47.378000             🧑  作者: Mango
这是一道考察栈的基本操作的题目。题目描述如下:
给你一个字符串序列,请你判断这个序列是否满足以下特征:
如果符合以上三个条件,返回"True";否则返回"False"。
示例:
输入:"{[]}" 输出:True
输入:"([}])" 输出:False
可以借助栈的思想,在遍历字符串时对每一个左括号都压入栈中,对于每一个右括号,都弹出栈顶的左括号进行匹配。
具体思路如下:
下面是基于Python语言的代码实现:
def is_valid(s: str) -> bool:
stack = [] # 创建一个空栈
mapping = {")": "(", "}": "{", "]": "["} # 用字典存储括号对应关系
for char in s:
if char in mapping: # 如果是右括号
top_element = stack.pop() if stack else "#" # 如果栈为空,则将一个任意字符作为栈顶元素
if mapping[char] != top_element: # 如果该右括号不匹配栈顶元素,则返回False
return False
else: # 如果是左括号,则将其入栈
stack.append(char)
return not stack # 判断栈是否为空,返回结果
本题考察了栈的应用,算法思路简单,但需要注意细节,如空栈时需要设置一个哨兵元素,字典存储括号对应关系等。对于此类括号匹配问题,例如HTML标签的匹配,都可以采用此方法求解。