给定仅包含“()[]{}”六种括号的字符串,请你判断该字符串中,括号的匹配是否是合法的,也就是对应括号的数量、嵌套顺序完全正确。 输入格式: 第一行一个整数T(T<=10) 其后T行每行一个字符串只包含[{()}]六种字符(字符串长度2e5以内) 输出格式: 对于每个字符串,匹配输出Yes,否则输出No。yongPython代码实现
时间: 2024-03-02 07:50:42 浏览: 76
js代码-给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
使用栈来解决括号匹配问题是一种常见的方法。遍历字符串的每个字符,遇到左括号就将其入栈,遇到右括号就将栈顶的左括号出栈并判断是否匹配。如果最后栈为空,则说明括号匹配,否则不匹配。
具体实现时,可以使用一个栈来存储左括号。遍历字符串中的每个字符,如果当前字符是左括号,则将其入栈。如果当前字符是右括号,则判断栈顶的左括号是否与之匹配,匹配则将其出栈,不匹配则返回 False。最后如果栈为空,则返回 True,否则返回 False。
下面是 Python 的代码实现:
```python
def is_valid(s):
stack = []
for c in s:
if c in ("(", "[", "{"):
stack.append(c)
elif c in (")", "]", "}"):
if not stack:
return False
if c == ")" and stack[-1] == "(":
stack.pop()
elif c == "]" and stack[-1] == "[":
stack.pop()
elif c == "}" and stack[-1] == "{":
stack.pop()
else:
return False
return not stack
T = int(input())
for _ in range(T):
s = input()
if is_valid(s):
print("Yes")
else:
print("No")
```
时间复杂度为 $O(n)$,其中 $n$ 是字符串的长度。
阅读全文