请编写程序判断一个包含“(”和“)”的括号序列是否匹配。如匹配则输出Match;如不匹配,计算出使该序列变为匹配序列所需添加的最少括号数目(只允许在该序列开始和结尾处添加括号),并输出经添加最少括号后得到的合法匹配序列。
时间: 2024-09-30 11:03:15 浏览: 29
为了编写这样一个程序,你可以采用栈数据结构来解决这个问题。栈是一种先进后出的数据结构,非常适合检查括号序列。以下是一个简单的Python程序示例:
```python
def is_valid(s):
stack = []
mapping = {")": "(", "}": "{", "]": "["}
for char in s:
if char in mapping.values(): # 如果遇到开放括号,入栈
stack.append(char)
elif char in mapping.keys(): # 如果遇到关闭括号
if not stack or stack.pop() != mapping[char]: # 检查栈顶是否与当前闭合括号匹配
return False, len(mapping[char]) # 不匹配,返回需要添加的括号数
return True, 0 if not stack else len(stack) # 验证完所有括号,检查栈是否为空
# 测试函数
s = "()"
match, add_count = is_valid(s)
if match:
print("Match")
else:
print(f"Add {add_count} pairs to make it valid: ({'()' * add_count}{s}{')' * add_count})")
# 示例输出:Match 或者 Add 1 pair to make it valid: (())
```
这个程序首先遍历输入字符串`s`中的每个字符,如果遇到开放括号就压入栈中,遇到关闭括号时检查栈顶元素是否与其匹配。如果不匹配,则计算缺失的对应括号数目。遍历结束后,如果栈为空表示原始序列是匹配的,反之则是不匹配的,并计算需要添加的括号数。
阅读全文