下面是基于Python判断字符串括号是否闭合的完整攻略:
问题描述:
给定一个字符串,包含括号字符{}
、[]
、()
,请编写一个函数来判断该字符串中的所有括号是否合法闭合。
解法思路:
这个问题可以用栈来解决,具体的解法如下:
- 定义一个栈
stack
,用来存储左括号,遍历字符串,对于字符串中的每个字符: - 如果是左括号(
{
、[
、(
),则将该字符入栈; - 如果是右括号(
}
、]
、)
),则从栈顶取出一个左括号,判断该右括号是否与该左括号匹配(判断方法见下文): - 如果匹配,继续遍历字符串,处理下一个字符;
-
如果不匹配,返回
False
,表示该字符串中的括号不是合法闭合的。 -
如果遍历完整个字符串后,栈中仍有左括号未被匹配到右括号,返回
False
。
判断左右括号是否匹配的具体实现方式:
- 左括号和右括号是同一类型的匹配,如
{}
、[]
、()
,我们可以将左括号和右括号作为一个键值对放到一个字典里,方便判断匹配。 - 对于右括号,我们从栈中取出一个左括号,判断它与该右括号是否匹配。如果匹配,则继续处理下一个字符;如果不匹配,返回
False
。 - 如果栈已经为空了,但还有右括号需要匹配,也返回
False
。
代码实现:
def is_valid_parentheses(s: str) -> bool:
stack = []
mapping = {")": "(", "}": "{", "]": "["}
for char in s:
if char in mapping:
if stack:
top_element = stack.pop()
else:
top_element = "#"
if mapping[char] != top_element:
return False
else:
stack.append(char)
return not stack
示例说明:
例如,对于输入字符串[{}]()
,输出为True
。具体运行过程如下:
- 遍历字符串,对于每个字符:
- 如果是左括号,如
[
、{
、(
,则入栈; - 如果是右括号,如
)
,则从栈顶取出一个括号,判断是否匹配,如果匹配,则继续遍历字符串,处理下一个字符;如果不匹配,则直接返回False
。 - 如果遍历完整个字符串后,栈中还有未被匹配掉的左括号,返回
False
;如果栈中已没有元素,返回True
。
因此,对于输入字符串[{}]()
,最终输出结果为True
。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于python判断字符串括号是否闭合{}[]() - Python技术站