📅  最后修改于: 2023-12-03 15:26:08.977000             🧑  作者: Mango
在一个给定的字符串中,判断括号的使用是否正确配对,即左括号与相应的右括号是否匹配。 例如,字符串 "()[{}]" 中的括号就是正确的匹配对,而 "([)]" 则不是。
可以使用堆栈(stack)数据结构来解决该问题。 我们可以遍历字符串的每个字符,如果是左括号,则将其压入堆栈中;如果是右括号,则弹出堆栈顶部的元素,并判断其是否与当前字符匹配。 如果是匹配的,则继续遍历字符串;如果不匹配,则说明字符串中的括号不是正确配对的。
以下是一个示例代码,该代码使用 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:
return False
else:
stack.append(char)
return not stack
其中,stack
变量表示堆栈,mapping
变量是一个字典,用于存储右括号与相应左括号的对应关系。
遍历字符串 s
中的每一个字符,对于每个字符 char
,如果其在 mapping
中,则说明其为右括号,我们需要将堆栈顶部的元素弹出,并判断其是否与 char
匹配。
如果不匹配,则说明字符串中的括号不是正确配对的;否则,我们继续遍历字符串。
遍历结束后,如果堆栈为空,则说明字符串中的所有括号都是正确配对的;反之,则说明字符串中存在未匹配的括号。
该算法的时间复杂度为 $O(n)$,其中 $n$ 是字符串的长度。 在遍历字符串的过程中,我们每个字符可能需要进出堆栈一次,因此时间复杂度为 $O(n)$。 同时,由于我们只使用了一个堆栈,因此空间复杂度为 $O(n)$。