括号匹配 我会带着你远行 2022-05-18 00:55 212阅读 0赞 ### [题目 括号匹配][Link 1] ### 一般的括号匹配问题是这样的: 给出一个字符串,判断这个括号匹配是不是合法的括号匹配。如”((” 和 “())”都不是合法的括号匹配,但是”()()()”,”(()())()”等就是合法的括号匹配。这个问题解决起来非常简单,相信大家都知道怎么解决。 现在给出一个加强版的括号匹配问题: 给出n个由括号 ‘(’ 和 ‘)’ 组成的字符串,请计算出这些字符串中有多少对字符串满足si + sj是合法的括号匹配。如果si + sj和sj + si都是合法的括号匹配(i ≠ j),那么这两种搭配都需要计入答案;如果对于si,si + si是合法的括号匹配,那么也需要计入答案。 输入描述: 第一行是一个整数n,表示字符串的个数;接下来n行是n个非空字符串,全部由’(‘和’)’组成。1 <= n <= 3 \* 105,字符串的长度之和不超过3 \* 105。 输出描述: 一个整数,表示满足条件的字符串对的数量。 输入例子1: 3 () ( ) 输出例子1: 2 输入例子2: 5 (() ))))) ()()() ((( )) 输出例子2: 1 ### 解析 ### 合法判断:去除字符串中形如”()”,直到不能去除为止,若字符串被清理为空,那么字符串合法,否则字符串不合法,变成以下三种:”(…(“、”)…)”、”)…)(…(“。考虑清理之后的字符串; n个字符串中,合法的字符串有num1个,不合法的字符串中,只有”(…(“、”)…)”能配成一组,二重循环遍历不合法字符串,配对数为num2; 最终结果为num1\*num1+num2。 ### 代码 ### #include<iostream> #include<string> #include<vector> using namespace std; string clean(string s){ while(s.find("()")!=-1) s.erase(s.find("()"), 2); return s; } int main(){ ios::sync_with_stdio(false);//取消cin于stdin的同步,提升效率 int n; cin >> n; vector<string> str(n, ""); string temp; int num1=0; vector<int> pool; for(int i=0;i<n;i++){ cin >> temp; str[i] = clean(temp); if(str[i].length()==0) num1++; else if(str[i][0]=='(') pool.push_back(str[i].length()); else if(str[i][0]==')' && str[i].find('(')==-1) pool.push_back(-str[i].length()); } int num2=0; for(int i=0;i<(int)pool.size();i++) for(int j=i;j<(int)pool.size();j++) if(pool[i]+pool[j]==0) num2++; cout<<num1*num1+num2<<endl; } [Link 1]: https://www.nowcoder.com/test/question/done?tid=17035212&qid=201986#summary
相关 【Java】括号匹配 \{\} 括号匹配模式 解题思路 栈 import java.util.Scanner; import java.util.Stack; 心已赠人/ 2022年12月09日 04:53/ 0 赞/ 221 阅读
相关 表达式括号匹配 题目描述 假设一个表达式有英文字母(小写)、运算符`(+,—,,/)`和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配, 忘是亡心i/ 2022年12月01日 01:24/ 0 赞/ 208 阅读
相关 括号匹配 <table style="width:1615px; margin-bottom:20px; background-color:transparent"> <tbody> 秒速五厘米/ 2022年06月02日 08:53/ 0 赞/ 263 阅读
相关 括号匹配 [题目 括号匹配][Link 1] 一般的括号匹配问题是这样的: 给出一个字符串,判断这个括号匹配是不是合法的括号匹配。如”((” 和 “())”都不是合法的括号匹配 我会带着你远行/ 2022年05月18日 00:55/ 0 赞/ 213 阅读
相关 括号匹配 栈的应用,括号匹配。 经典做法是,遇左括号压入,遇右括号判断,和栈顶配对就继续,不配对或者栈空就错了。最后判断是否为空。 代码有些麻烦。 我是遇左括号压对应的右括号,最后 你的名字/ 2022年05月06日 06:28/ 0 赞/ 267 阅读
相关 括号匹配 题目描述 假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“\[”和“\]”和花括号“\{”和“\}”,且这三种括号可按任意的次序嵌套使用(如:…\ ╰半橙微兮°/ 2022年03月30日 02:28/ 0 赞/ 296 阅读
相关 括号匹配 PTA 02:括号匹配 一、题目 给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,\[ \],\{ \} 冷不防/ 2022年02月27日 15:54/ 0 赞/ 349 阅读
相关 括号匹配 <table> <tbody> <tr> <td colspan="3"> <h2>括号匹配</h2> </td> </tr> <tr> 约定不等于承诺〃/ 2022年01月07日 04:37/ 0 赞/ 337 阅读
相关 括号匹配 include<stdio.h> include<stack> using namespace std; stack <int> s;//定义一 叁歲伎倆/ 2021年12月01日 17:44/ 0 赞/ 331 阅读
相关 括号匹配 括号配对问题 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 3 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行 怼烎@/ 2021年09月22日 07:20/ 0 赞/ 419 阅读
还没有评论,来说两句吧...