#1845. STL栈和队列-课堂案例1
STL栈和队列-课堂案例1
题目描述
小括号匹配 给定一串由左右小括号'( '、') '构成的字符串(长度≤100)。检测格式是否正确,若正确输出YES,错误输出NO。要求小括号需要成对出现,且必须是先左括号后右括号,即 (()) 或 (()()) 等为正确的格式, (() 或 ()) 或 ((( 均为不正确的格式。(请用STL stack完成) 【输入样例1】 (()()) 【输出样例1】 YES 【输入样例2】 ()) 【输出样例2】 NO #include #include #include using namespace std; int main(){ stack s; char a[100]={0}; // 字符串 int len; cin >> a; len = strlen(a); // 遍历字符串,进行小括号匹配 for(int i=0; i <len; i++){ if (a[i] == '('){ //左括号入栈 s.push(a[i]); } else{ // 右括号进行匹配 // 栈不为空,说明必然有一个左括号可以和当前右括号匹配,栈顶可以出栈 // 栈空,则无法匹配 if (!s.empty()) { s.pop(); } else { cout << "NO"; return 0; } } } if (s.empty()) cout << "YES"; else // ((()) 这种情况,遍历完成后栈还没清空 cout << "NO"; return 0; } /* 【输入用例2】 )(()) 【输出用例2】 NO 【输入用例3】 (()))() 【输出用例3】 NO 【输入用例4】 ((()) 【输出用例4】 NO
输入格式
无
输出格式
(见样例)
样例
输入样例 1
(()())
输出样例 1
YES
输入样例 2
())
输出样例 2
NO
输入样例 3
)(())
输出样例 3
NO
输入样例 4
(()))()
输出样例 4
NO
输入样例 5
((())
输出样例 5
NO