描述 给定一个字符串,字符串只包含两种字符:左括号“(”和右括号”)”。请判断这些括号是否能匹配。如果能则输出Yes,不能则输出No。 输入 一行,括号序列(一个字符串) 输出 Yes/No 样例输入 ((()))()() 样例输出 Yes 用C++来做
时间: 2024-11-27 14:10:51 浏览: 29
在C++中,你可以使用栈这种数据结构来解决这个问题。栈是一种后进先出的数据结构,对于括号匹配问题非常适用。遍历输入的字符串,遇到左括号`(`入栈,遇到右括号`)`时检查栈顶元素是否为左括号,并弹出。如果整个过程中栈始终保持非空,且所有括号都成对出现,那么最终栈会为空,说明括号匹配;否则,输出"No"。
以下是简单的C++代码实现:
```cpp
#include <iostream>
#include <stack>
using namespace std;
bool isValid(string s) {
stack<char> st;
for (char c : s) {
if (c == '(') {
st.push(c);
} else if (c == ')') {
if (st.empty()) return false; // 如果栈空,直接返回false
st.pop(); // 匹配一个右括号就从栈顶移除一个左括号
}
}
return st.empty(); // 遍历结束后,如果栈为空,表示括号完全匹配,返回true
}
int main() {
string input = "((()))()()";
if (isValid(input)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
```
当你运行这个程序,它将输出"Yes",因为给定的样例输入字符串中的括号可以完美地匹配。如果你有其他不同的字符串想要验证,只需替换`input`变量即可。
阅读全文