请编写程序判断一个包含“(”和“)”的括号序列是否匹配。如匹配则输出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, ')') 来输出。
标签:输出,right,匹配,括号,L2,序列,left 来源: https://blog.csdn.net/nahnah_/article/details/122805578
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。