题目:
括号匹配
请编写程序判断一个包含“(”和“)”的括号序列是否匹配。如匹配则输出Match;如不匹配,计算出使该序列变为匹配序列所需添加的最少括号数目(只允许在该序列开始和结尾处添加括号),并输出经添加最少括号后得到的合法匹配序列。
输入格式
输入为一个字符串,包含不超过100000个括号。
输出格式
若输入的括号序列匹配,则输出Match。若不匹配,则输出分为2行,第1行为一个整数,表示将该序列变为匹配序列所需添加的最少括号数目,第2行为一个字符串,表示经添加最少括号后得到的合法匹配序列。
输入样例1:
(())()
输出样例1:
Match
输入样例2:
)(
输出样例2:
2 ()()
输入样例3:
()))((
输出样例3:
4 ((()))(())
代码:
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
int top = 0;
int num = 0;
string str;
cin >> str;
int len = str.size();
for (int i = 0; i < len; i++) {
if (str[i] == '(') {
top++;
}
else
{
if (top == 0) {
num++;
}
else {
top--;
}
}
}
if (top == 0 && num == 0) {
cout << "Match";
}
else {
cout << num + top << endl;
for(int i = 0; i < num; i++)
cout << '(';
cout << str;
for(int i = 0; i < top; i++)
cout << ')';
}
}