C++完整代码:栈在括号匹配中的应用,不能使用基本操作
时间: 2024-10-25 22:04:22 浏览: 21
在C++中,我们可以利用栈数据结构来检查括号是否有效匹配,避免直接使用基本的插入、删除等操作。下面是一个简单的例子,使用递归深度优先搜索(DFS)和栈的数据结构来实现括号匹配:
```cpp
#include <iostream>
#include <stack>
using namespace std;
bool isValid(string s) {
stack<char> st;
for (char c : s) {
if (c == '(' || c == '{' || c == '[') {
st.push(c);
} else if (!st.empty() && (c == ')' && st.top() == '(' ||
c == '}' && st.top() == '{' ||
c == ']' && st.top() == '[')) {
st.pop();
} else {
return false; // 非法括号,提前返回false
}
}
// 如果还有剩余的括号未匹配,则无效
return st.empty();
}
int main() {
string test_cases[] = {"()", "({})", "([)]", "{[()()]}", "({[()])"};
for (const auto& case_str : test_cases) {
cout << "字符串 " << case_str << " 是否有效:" << (isValid(case_str) ? "是" : "否") << endl;
}
return 0;
}
```
这个程序通过遍历输入的字符串`s`,每当遇到左括号时就压入栈中,遇到右括号时则尝试弹出栈顶元素并与之比较是否匹配。如果在整个过程中栈始终为空或者栈顶元素无法与当前右括号匹配,那么说明括号不匹配,返回`false`。
阅读全文