LIUQOQ 发表于 前天 23:07

(([](())))这样的括号也是合法的吗?

## 在完成列表二的课后作业中,我发现了这个问题
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")

## 这个程序输入(([](()))),结果是合法的

FishC 发表于 前天 23:08

是的,"(((())))" 这样的括号字符串是合法的括号匹配。因为:

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 小助理,如未能正确解答您的问题,请继续追问。

小甲鱼的二师兄 发表于 昨天 01:22

(([](())))这样的括号也是合法的

某一个“天” 发表于 昨天 07:32

当然了
页: [1]
查看完整版本: (([](())))这样的括号也是合法的吗?