C++输输入一个只包含 (和)的字符串 个(只能匹配一个 ),但一个( 必须出现在 )之前。请判断这个字符串能否括号完全匹配,如果能,输出YES(匹配的括号不可以交叉),否则输出NO”
时间: 2024-02-12 15:02:31 浏览: 52
好的,这是一个经典的括号匹配问题。我可以为您提供解法。
首先,我们需要定义一个栈来保存左括号,遍历字符串,遇到左括号就入栈,遇到右括号就出栈匹配。如果匹配成功,继续遍历;否则直接返回“NO”。
在匹配过程中,需要注意的是左括号必须出现在右括号之前,且匹配的括号不能交叉。因此,我们可以维护一个计数器来记录当前左括号的个数,每次遇到右括号时,先判断栈是否为空,如果为空或者栈顶元素不是左括号,返回“NO”;否则弹出栈顶元素并将计数器减一,继续遍历。如果最后栈为空且计数器为零,则表示括号完全匹配,返回“YES”,否则返回“NO”。
以下是 C++ 代码实现:
```c++
#include <iostream>
#include <stack>
using namespace std;
int main() {
string s;
cin >> s;
stack<char> st;
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '(') {
st.push(s[i]);
count++;
} else if (s[i] == ')') {
if (st.empty() || st.top() != '(') {
cout << "NO" << endl;
return 0;
}
st.pop();
count--;
}
}
if (st.empty() && count == 0) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}
```
希望能够帮到您!