博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1241 括号序列(栈)
阅读量:5325 次
发布时间:2019-06-14

本文共 1232 字,大约阅读时间需要 4 分钟。

嗯...

 

题目链接:https://www.luogu.org/problem/P1241

 

首先这道题是栈的入门题的加强版, 不仅要你判断这个括号序列是否合法,还要你将这个序列补充完整...

一开始是没有头绪的,看到tj之后恍然大悟...

 

思路:

我们假设所有的括号都是不合法的,即都没有匹配,然后我们从头扫一遍,对于左括号的处理比较简单:

把所有左括号的下标存入q这个手写栈,然后把所有左括号对应的右括号存入b数组中。

然后对于右括号的处理比较复杂:

如果先前的左括号都已匹配或者栈顶的左括号不与之匹配,那么将这个右括号匹配与其他匹配,即在b数组相应位置放一个左括号。如果匹配则将b数组中存的右括号清除。

输出时注意顺序...

 

AC代码:

1 #include
2 #include
3 #include
4 5 using namespace std; 6 7 char s[105], b[105]; 8 int q[105], cnt; 9 10 int main(){11 scanf("%s", s);12 int l = strlen(s);13 for(int i = 0; i < l; i++){14 if(s[i] == '(') {q[++cnt] = i; b[i] = ')'; continue;}15 if(s[i] == '[') {q[++cnt] = i; b[i] = ']'; continue;}16 if(s[i] == ')' || s[i] == ']'){17 if(!cnt || b[q[cnt]] != s[i]){18 if(s[i] == ')') b[i] = '(';19 else b[i] = '[';20 }21 else b[q[cnt--]] = ' ';22 }23 }24 for(int i = 0; i < l; i++){25 if(b[i] == '(' || b[i] == '[') printf("%c", b[i]);26 printf("%c", s[i]);27 if(b[i] == ')' || b[i] == ']') printf("%c", b[i]);28 }29 return 0;30 }
AC代码

 

转载于:https://www.cnblogs.com/New-ljx/p/11284700.html

你可能感兴趣的文章
学习:组件生命周期(2)
查看>>
模板方法模式
查看>>
3.创建额外域
查看>>
(转)关于TCP封包、粘包、半包
查看>>
animate.css注意事项
查看>>
Java输入输出流
查看>>
java实现文件的复制
查看>>
BZOJ 4695 最假女选手 线段树
查看>>
好的分析报告应该包含的内容
查看>>
使用GIT的失败过程
查看>>
Unity3d 协程的注意问题(新手须注意,老手须加勉)
查看>>
python爬虫学习(10) —— 专利检索DEMO
查看>>
日历 java方法实现
查看>>
Integer值判断是否相等问题
查看>>
实验中心服务器配置记录
查看>>
js数组去重
查看>>
UIView 设置背景图片
查看>>
$2018/8/15 = Day \ \ 1$杂题整理
查看>>
SpringBoot整合ActiveMQ
查看>>
[PCB设计] 2、畸形PCB板子的制作核心——AD14导入dwg格式文件的方法
查看>>