括号画家

# 题意

一共有3种括号,空的括号是美观的
(1) 空的括号序列是美观的;
(2) 若括号序列A是美观的,则括号序列 (A)、[A]、{A} 也是美观的;
(3) 若括号序列A、B都是美观的,则括号序列AB也是美观的。
例如 [(){}]() 是美观的括号序列,而)({)[}]( 则不是。
现在达达想在她绘制的括号序列中,找出其中连续的一段,满足这段子序列是美观的,并且长度尽量大。

# 题解

栈中保存前括号的下标,扫描,匹配上时出栈,不匹配跳过,若栈不空,用当前下标减栈中中标,因为当前未匹配入展,所以不合法减去即可,所得为0,否则即匹配减去未匹配即当前已匹配的最大长度

若栈空说明此符号前都被匹配,用当前到该下标所有长度更新

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const int N = 1e5+10;
 5 int idx,stk[N];
 6 int ans;
 7 string str;
 8 int main(){
 9    ios::sync_with_stdio(0);
10    cin.tie(0);
11    cout.tie(0);
12    cin>>str;
13    for(int i = 0; i < str.size(); i++){
14       char c = str[i];
15       if (c == ‘)‘ &&  str[stk[idx]] == ‘(‘) idx--;
16       else if (c == ‘]‘ && str[stk[idx]] == ‘[‘) idx--;
17       else if (c == ‘}‘ && str[stk[idx]] == ‘{‘) idx--;
18       else stk[++idx]=i;
19
20       if(idx) ans = max(ans , i - stk[idx]);
21       else ans = max(ans , i + 1);
22    }
23    cout<<ans;
24 }

原文地址:https://www.cnblogs.com/hhyx/p/12495696.html

时间: 2024-08-28 19:45:26

括号画家的相关文章

AcWing - 150 - 括号画家 = 栈

https://www.acwing.com/problem/content/152/ 思路:开一个pair栈,第一个元素存字符的种类,第二个元素存"这个字符之后曾经匹配过的最大长度". 为什么是"这个字符之后",我也很难说清楚,但是感觉这样是对的.某一次遇到右括号弹栈之后,顺便把栈顶的最大长度也update了. 一开始插入一个虚拟节点就不需要判空了. #include<bits/stdc++.h> using namespace std; typede

0x18 总结与练习

这一章不太满意啊.. 还是有点痛苦,但就是做的挺慢啊... 1.就是例题 2.括号画家 感觉这种提高组类型的细节题都没什么信心啊,fail了几次才A #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; char ss[110000]

《算法竞赛进阶指南》1.8总结与练习(1)

150. 括号画家 达达是一名漫画家,她有一个奇特的爱好,就是在纸上画括号. 这一天,刚刚起床的达达画了一排括号序列,其中包含小括号( ).中括号[ ]和大括号{ },总长度为N. 这排随意绘制的括号序列显得杂乱无章,于是达达定义了什么样的括号序列是美观的: (1) 空的括号序列是美观的: (2) 若括号序列A是美观的,则括号序列 (A).[A].{A} 也是美观的: (3) 若括号序列A.B都是美观的,则括号序列AB也是美观的. 例如 (){} 是美观的括号序列,而)({)[}]( 则不是.

SQL查询字段添加括号报错:Operand should contain 1 column(s)

SQL语句:查询连个字段的信息 SELECT (menu_id,menu_captions) FROM bsdb.menulist a WHERE a.menu_id like ('2_'); 然后,因为这是在存储过程中的一个语句所以,在执行存储过程的时候编译不会报错,但是执行的时候却汇报错:Operand should contain 1 column(s):原因不好解释: 下面是官方发解释(MYSQL):https://dev.mysql.com/doc/refman/5.0/en/row-

leetcode栈--5、valid-parentheses(有效括号)

题目描述 Given a string containing just the characters'(',')','{','}','['and']', determine if the input string is valid. The brackets must close in the correct order,"()"and"()[]{}"are all valid but"(]"and"([)]"are not.

shell中各种括号的作用

小括号里是命令大括号是变量值   一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. ②命令替换.等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令.有些shell不支持,如tcsh. ③用于初始化数组.如:array=(a b

数据结构(括号序列,线段树):ZJOI 2007 捉迷藏

[题目描述] Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N-1条走廊的分布使得任意两个屋子都互相可达. 游戏是这样进行的,孩子们负责躲藏,Jiajia负责找,而Wind负责操纵这N个屋子的灯.在起初的时候,所有的灯都没有被打开.每一次,孩子们只会躲 藏在没有开灯的房间中,但是为了增加刺激性,孩子们会要求打开某个房间的电灯或者关闭某个房间的电灯.为了评估某一次

Android自动手绘,圆你儿时画家梦!

我的简书同步发布:Android自动手绘,圆你儿时画家梦! 从小就喜欢到处乱画,家里一米以下墙上就没有一块干净的地方(那是老房子啦~)~~(⊙﹏⊙)b.好了,废话不多说,进入主题.今天主要跟大家分享一下如何将一张图片转成手绘效果,并模拟画家动态绘制.先把最终效果图亮出来,觉得好的请点个赞,您的点赞是对我的最大鼓励(O(∩_∩)O哈哈~). 效果图如下: 再来张截图: 心动有木有! 原理 大概介绍一下实现原理.首先你得有一张图(废话~),接下来就是把这张图的轮廓提取出来,轮廓提取算法有很多,本人不

南阳OJ-2 括号配对 (数据结构-栈的应用)

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组.数据保证S中只含有"[","]","(",")"四种字符 输出 每组输入数据的输出占一行,