用栈实现判断小括号是否有效,并判断有几个无效的小括号
时间: 2024-10-24 17:03:23 浏览: 15
使用栈(Stack)可以有效地判断给定字符串中的小括号是否有效以及有多少个无效的小括号。栈是一种后进先出(LIFO)的数据结构,适合用于这种需要按顺序处理元素的问题。以下是算法步骤:
1. 初始化两个计数器:一个`valid_count`记录有效括号对(即每对'()'都完整匹配),另一个`invalid_count`记录无效的单个括号。
2. 遍历输入的字符串,对于每个字符:
a. 如果遇到'('、'{'或'[':
- 将它们压入栈中。
b. 如果遇到')'、'}'或']':
- 检查栈顶的元素是什么。如果是对应的开括号(如'('对应')','['对应']'等),则弹出栈顶元素并减一`valid_count`。否则,增加`invalid_count`,因为遇到了非配对的闭括号。
3. 遍历结束后,如果有任何剩余的开括号在栈里,这意味着还有未关闭的括号,所以`invalid_count`加一。
4. `valid_count`现在表示的有效括号对数目,`invalid_count`表示的则是无效括号数目。
以下是一个简单的Python示例:
```python
def count_invalid_parens(s):
stack = []
valid_count = invalid_count = 0
pairs = {'(': ')', '{': '}', '[': ']'}
for char in s:
if char in pairs:
stack.append(char)
elif not stack or char != pairs[stack[-1]]:
invalid_count += 1
else:
stack.pop()
# If there are any remaining open brackets, they're also invalid
if stack:
invalid_count += len(stack)
return valid_count, invalid_count
input_str = "({[]})"
valid, invalid = count_invalid_parens(input_str)
print(f"有效括号对数: {valid}, 无效括号数: {invalid}")
阅读全文