#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