L2-1 括号匹配

请编写程序判断一个包含“(”和“)”的括号序列是否匹配。如匹配则输出Match;如不匹配,计算出使该序列变为匹配序列所需添加的最少括号数目(只允许在该序列开始和结尾处添加括号),并输出经添加最少括号后得到的合法匹配序列。

输入格式:

输入为若干行,每行一个字符串,包含不超过105个括号。输入行数不超过10行。

输出格式:

对于输入的每个括号序列输出1行或2行信息。若输入的括号序列匹配,则输出Match。若不匹配,则输出分为2行,第1行为一个整数,表示将该序列变为匹配序列所需添加的最少括号数目,第2行为一个字符串,表示经添加最少括号后得到的合法匹配序列。

输入样例:

(())()
)(
()))((

输出样例:

Match
2
()()
4
((()))(())
#include<iostream>
using namespace std;
int main() {
	string s;
	while(cin >> s){
		int left = 0;
		int right = 0;
		for (char x : s) {
			if (x == '(') {
				left++;
			}//以左括号为观测,右括号来和它匹配
			else {
				if (left > 0) {
					left--;
				}
				else right++;
			}
		}
		if (left == 0 && right == 0) cout << "Match" << endl;
		else {
			cout << right + left << endl;
			cout << string(right, '(') + s + string(left, ')') << endl;
		}
	}
	
	return 0;
}

思路:该题在字符左右两侧加括号,我们用left和right来记录多余出来的  ’(‘  和   ')'; 用到了增强for循环 ,如果没有Match,string(right, '(') + s + string(left, ')')  来输出。

上一篇:个人练习赛1补题


下一篇:【leetcode 每日打卡】219. 存在重复元素 II