给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
实现:
可以使用栈来解决这个问题。遇到左括号就入栈,遇到右括号就判断栈顶是否匹配,如果匹配则出栈,否则返回False。如果最后栈为空,则说明所有括号都匹配成功,返回True。
以下是Python的实现代码:
class Solution: def isValid(self, s: str) -> bool: stack = [] for c in s: if c in ('(', '[', '{'): stack.append(c) else: if not stack: return False top = stack.pop() if (top == '(' and c != ')') or \ (top == '[' and c != ']') or \ (top == '{' and c != '}'): return False return not stack
时间复杂度为O(n),其中n为字符串s的长度,空间复杂度也为O(n),即栈的最大长度。
知识点:
栈是一种数据结构,它遵循“后进先出”(LIFO)的原则。也就是说,最后压入栈中的元素最先弹出,而最先压入栈中的元素最后弹出。
栈有两个基本操作:压入(push)和弹出(pop)。当一个元素被压入栈中,它就成为了栈的顶部元素(top)。当需要弹出一个元素时,栈会弹出栈顶元素,并把它从栈中删除。
栈的另外一个重要的操作是查看栈顶元素(top),这个操作并不会删除栈顶元素。
栈的应用十分广泛,例如程序中函数的调用栈就是一个典型的栈结构。当一个函数被调用时,它会被压入栈中,当函数执行完毕时,它会被弹出栈。栈还可以用来实现括号匹配、浏览器的后退功能等。