ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

L2-1 括号匹配 (25 分)——寒假训练测试题目集

2022-02-05 20:04:51  阅读:170  来源: 互联网

标签:25 匹配 输出 括号 寒假 L2 序列 输入 left


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

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

Match
2
()()
4
((()))(())

AC代码:

思路:设置两个计数变量统计前面缺失的左括号数量和后面缺失的右括号数量。

此处应用到c++中string函数:string s(num,c) //生成一个字符串,包含num个c字符C++常用函数总结

#include<bits/stdc++.h>
using namespace std;
int main(){
    string str;
    while(cin>>str){
    int left=0;//多余的左括号数
    int right=0;//多余的右括号数
        for(char c:str){
            if(c=='('){
                left++;
            }else {
                if(left>0)
                left--;
                else
                  right++;
            }
        }
        if(left==0&&right==0){
            cout<<"Match"<<endl;
        }else{
            cout<<left+right<<endl;
            cout<<string(right,'(')<<str<<string(left,')')<<endl;
        }
    }
    return 0;
}

 

标签:25,匹配,输出,括号,寒假,L2,序列,输入,left
来源: https://blog.csdn.net/victory066/article/details/122792530

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有