写一个c++代码要求给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
时间: 2024-11-25 17:00:44 浏览: 21
在C++中,你可以使用一个栈数据结构来检查这个字符串的有效性。当遍历输入字符串时,如果遇到左括号就将其压入栈中,如果遇到右括号,就检查栈顶元素是否与其匹配,如果不匹配或者栈为空,则说明字符串无效。下面是一个简单的解决方案:
```cpp
#include <string>
#include <stack>
bool isValid(std::string s) {
std::stack<char> brackets;
for (char c : s) {
if (c == '(' || c == '{' || c == '[') { // 遇到左括号,压入栈
brackets.push(c);
} else if (c == ')' && !brackets.empty() && brackets.top() == '(') { // 匹配'('
brackets.pop();
} else if (c == '}' && !brackets.empty() && brackets.top() == '{') { // 匹配'{'
brackets.pop();
} else if (c == ']' && !brackets.empty() && brackets.top() == '[') { // 匹配']'
brackets.pop();
} else { // 右括号无法匹配
return false;
}
}
// 如果所有右括号都已匹配,则字符串有效
return brackets.empty();
}
int main() {
std::string test_cases[] = {"()", "({})", "([])", ")(", "{[()]}", "[{()}]"};
for (const auto& test : test_cases) {
if (isValid(test)) {
std::cout << test << " is valid.\n";
} else {
std::cout << test << " is invalid.\n";
}
}
return 0;
}
```
阅读全文