使用Python分割含空格匹配括号组:代码无法识别嵌套组问题
括号组分割程序修复
需求描述
给定由匹配括号组和空格组成的字符串,编写易用的Python程序,将其分割为无空格的完美匹配括号组。
输入输出示例
- 输入:
( ()) ((()()())) (()) (),输出:['(())', '((()()()))', '(())', '()'] - 输入:
() (( ( )() ( )) ) ( ()),输出:['()', '((()()()))', '(())']
现有问题代码
def split_parentheses(input_string): result = [] stack = [] for char in input_string: if char == '(': stack.append(char) elif char == ')': if len(stack) > 0 and stack[-1] == '(': stack.pop() if len(stack) == 0: result.append(''.join(stack)) stack = [] # clear stack for the next group else: return "Invalid input string: parentheses not perfectly matched." if len(stack) > 0: return "Invalid input string: parentheses not perfectly matched." return result def wrap_with_parentheses(string): return f'({string})' input_string = input("Enter a string of perfectly matched parentheses and whitespace: ") result = split_parentheses(input_string) result = list(map(wrap_with_parentheses, result)) print(result)
问题分析
原代码核心问题:
- 仅用栈记录左括号数量,未保存完整括号序列,栈清空时
''.join(stack)只能得到空字符串,后续手动加括号的操作完全错误。 - 无法追踪嵌套括号组的完整内容,自然提取不出
((()()()))这类嵌套结构的括号组。
修复后的代码
def split_parentheses(input_string): result = [] stack = [] current_group = [] for char in input_string: if char == ' ': continue # 直接跳过空格 if char == '(': stack.append(char) current_group.append(char) elif char == ')': if not stack or stack[-1] != '(': return "Invalid input string: parentheses not perfectly matched." stack.pop() current_group.append(char) # 栈为空时,当前括号组匹配完成 if not stack: result.append(''.join(current_group)) current_group = [] # 重置当前组 if stack: return "Invalid input string: parentheses not perfectly matched." return result input_string = input("Enter a string of perfectly matched parentheses and whitespace: ") result = split_parentheses(input_string) print(result)
代码说明
- 跳过空格:遍历字符串时直接忽略空格,无需额外处理。
- 跟踪当前括号组:用
current_group列表保存正在构建的括号序列,每遇到左/右括号都添加进去。 - 栈的作用:仅用于判断括号匹配状态和组结束时机——栈清空时,说明当前括号组完美匹配,将其加入结果并重置
current_group。 - 错误处理:遇到不匹配的右括号或遍历结束后栈不为空时,返回错误提示。
内容的提问来源于stack exchange,提问作者Anukaran Arora
相关产品推荐
相关产品推荐

