题目:来源于洛谷
思路:主要利用栈的特点,具体看代码吧!
代码:
#include <iostream>
#include <cstdio>
#include <stack>
#include <string>
using namespace std;
int main()
{
//思路:输入一行字符串
//这里暂且不管 @ 的结束符
string s;
getline(cin, s);
stack<char> st;
//我需要知道 不匹配的三种情况
//1.左括号多余 (()
//2.右括号多余 ())
//3.右括号在前 )()( 这种我不知道能不能过
int flag = 0; //标记是否第一次检查括号,就查到 )
for (int i = 0; i < s.length(); ++i) {
if (s[i] == '(') {
st.push(')');
}
else if (s[i] == ')'&&st.empty()) {
flag = 1;
break;
}
else if (s[i] == ')') {
st.pop();
}
}
//如果栈为空,且第一次没有检测到 )
if (st.empty() && !flag)
cout << "YES";
else
cout << "NO";
return 0;
}
今天早上我打算把前3天做过的题,再重新做一遍,有些题还是解不出来,加油鸭!彩笔本笔(。>︿<)_θ