(([](())))这样的括号也是合法的吗?
## 在完成列表二的课后作业中,我发现了这个问题s = input("请输入测试字符串:")
# 创建一个特殊列表
stack = []
for c in s:
# 如果是左括号,那么添加到特殊列表中
if c == '(' or c == '[' or c == '{':
stack.append(c)
# 如果是右括号的情况
else:
# 如果碰到右括号,但特殊列表中没有左括号,那么肯定是非法的
if len(stack) == 0:
print("非法T_T")
break
# 逐个给出 c 对应的右括号 d
if c == ')':
d = '('
elif c == ']':
d = '['
elif c == '}':
d = '{'
# 对比 d 和从特殊列表尾部弹出的元素
if d != stack.pop():
print("非法T_T")
break
else:
# 如果循环走完,特殊列表不为空,那么肯定是左括号比右括号多的情况
# 那肯定有同学会问:右括号比左括号多的情况在哪里判断?
# 小甲鱼答:在上面 d != stack.pop() 的判断中已经可以排除了~
if len(stack) == 0:
print("合法^o^")
else:
print("非法T_T")
## 这个程序输入(([](()))),结果是合法的 是的,"(((())))" 这样的括号字符串是合法的括号匹配。因为:
1. 每个左括号 ( 都有对应的右括号 ) 闭合
2. 括号的开闭顺序正确(没有交叉或未闭合的情况)
3. 左括号数量(4个)等于右括号数量(4个)
以下是一个验证括号匹配的代码示例:
s = input("请输入测试字符串:")
stack = []# 创建空栈
for c in s:
if c == '(':
stack.append(c)# 左括号入栈
elif c == ')':
if not stack: # 栈为空时遇到右括号
print("非法!")
break
stack.pop() # 弹出栈顶左括号
else:
# 循环正常结束时检查栈是否为空
if not stack:
print("括号合法!")
else:
print("括号非法!")
测试结果:
1. 输入 (((()))) → 输出 "括号合法!"
2. 输入 ()()) → 输出 "非法!"(右括号多余)
3. 输入 ((()) → 输出 "括号非法!"(左括号多余)
注意:你代码中的 if c == '(' or c == '': 有错误,空字符串 '' 应该改为其他括号类型(如 '[')才能处理多种括号,若只需处理圆括号可简化为 if c == '('。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 (([](())))这样的括号也是合法的 当然了
页:
[1]