输入可能包含'{'、‘}’、'['、']'、'('、')'这6种字符的字符串(不超过20个,不考虑空字符串),如果3种左右括号出现的次数能够匹配——比如出现3个左花括号和3个右花括号,2个左方括号和2个右方括号等,则认为匹配,否则不匹配。只考虑3种括号的匹配,其他字符不予考虑
时间: 2024-12-17 22:18:56 浏览: 3
要检查这个字符串中的括号是否匹配,我们可以使用栈(Stack)数据结构。栈是一个后进先出(LIFO,Last In First Out)的数据结构,非常适合处理这种递归的问题。
以下是一个简单的C++函数,用于判断给定的字符串是否满足括号配对:
```cpp
#include <stack>
bool isMatching(const std::string& str) {
const char leftBrackets[] = {'(', '[', '{'};
const char rightBrackets[] = {')', ']', '}'};
std::stack<char> stack;
for (char c : str) {
if (std::find(leftBrackets, leftBrackets + sizeof(leftBrackets), c) != leftBrackets + sizeof(leftBrackets)) {
// 如果遇到非括号字符,直接跳过
continue;
}
if (!stack.empty() && rightBrackets[stack.top()] != c) {
// 如果栈顶元素不是对应的闭合括号,返回false
return false;
}
stack.push(c);
}
// 检查剩余括号是否都能找到对应
return stack.empty();
}
```
这个函数遍历字符串,对于每个遇到的括号,它会尝试从栈顶取出一个对应的闭合括号进行比较。如果遇到非括号字符或没有合适的闭合括号,函数会立即返回`false`。当遍历结束后,如果没有剩余括号在栈里,说明所有括号都已正确配对,返回`true`;否则返回`false`。
阅读全文