c++题目:有效的括号序列(栈) 问题:给定一个只包含括号()、[]和{}的字符串,判断字符串是否为有效的括号序列。有效的括号序列需满足:括号必须正确配对且嵌套。 提示:使用栈来判断括号的配对和嵌套情况。
时间: 2024-10-13 22:14:15 浏览: 48
hw6_3_.rar_yes_栈 括号匹配
在 C++ 中,你可以通过创建一个栈数据结构来解决这个有效的括号序列问题。以下是基本的步骤:
1. 定义一个栈,通常可以使用 vector 或者自定义的 Stack 类,用于存储打开的括号。
2. 遍历输入的字符串,对于每个字符:
- 如果字符是开放括号(如 '(', '[', '{'),将其压入栈中。
- 如果字符是关闭括号(如 ')', ']', '}'):
- 检查栈顶的括号是否与其相匹配(例如,')' 对应的是 '(',']' 对应的是 '[','}' 对应的是 '{')。如果匹配,弹出栈顶元素;如果不匹配,返回 false,因为括号无法正确配对。
- 如果遍历结束后,栈为空,说明所有括号都已配对,返回 true。
3. 如果在遍历过程中遇到不匹配的闭合括号或者遍历结束栈不空,返回 false。
以下是一个简单的 C++ 代码示例:
```cpp
#include <stack>
#include <string>
bool isValidParentheses(std::string s) {
std::stack<char> stack;
const char openBrackets[] = "([{";
const char closeBrackets[] = {')', ']', '}'};
for (char c : s) {
if (openBrackets.find(c) != std::string::npos) {
stack.push(c);
} else if (closeBrackets[0] == c) {
if (stack.empty() || openBrackets[stack.top()] != closeBrackets[1]) {
return false;
}
stack.pop();
}
}
return stack.empty(); // 如果所有括号都正确匹配了,栈会为空
}
```
阅读全文