描述

Candela是一名漫画家,她有一个奇特的爱好,就是在纸上画括号。这一天,刚刚起床的Candela画了一排括号序列,其中包含小括号( )、中括号[ ]和大括号{ },总长度为N。这排随意绘制的括号序列显得杂乱无章,于是Candela定义了什么样的括号序列是美观的:

(1) 空的括号序列是美观的;

(2) 若括号序列A是美观的,则括号序列 (A)、[A]、{A} 也是美观的;

(3) 若括号序列A、B都是美观的,则括号序列AB也是美观的。

例如 [(){}]() 是美观的括号序列,而 )({)[}]( 则不是。

现在Candela想在她绘制的括号序列中,找出其中连续的一段,满足这段子序列是美观的,并且长度尽量大。你能帮帮她吗?

输入格式

一个由括号组成的字符串。

输出格式

一个整数,表示最长的美观的子段的长度。

样例输入

({({(({()}})}{())})})[){{{([)()((()]]}])[{)]}{[}{)

样例输出

4

做法:
括号匹配就用栈来模拟: (具体步骤如下)
1.遇到左括号就入栈。
2.遇到右括号:
a.如果和栈顶(左)括号匹配,则出栈,同时匹配长度+2.(因为如果最近的都不匹配,那么往后的中间一定会夹杂这个未匹配的右括号,这是不符合完美匹配的)
b.如果不匹配栈顶括号,那么清空栈并且配备长度重置为0.
3.在入出栈的过程中记录最长匹配。
4.输出最长匹配。 //第一步入栈可以找到字符串中第一个左括号入栈,不过数据点不影响
//代码如下:
#include<cstdio>
#include<cstring>
char s[];
char stk[];
int top,maxlen=; int main()
{
//int start;
scanf ("%s",s);
/*for (start=0;;start++)
if (s[start]==40 || s[start]==91 || s[start]==123)
{
stk[++top]=s[start];
break;
}*/
stk[++top]=s[];
int len=;
for (int i=;i<strlen(s);i++)//for (int i=start+1;i<strlen(s);i++)
{
if (s[i]==stk[top]+ || s[i]==stk[top]+)//小括号左右ASCII差1,中大括号左右ASCII差2
{
len+=;
stk[top]='\0'; top--;
maxlen<len ? maxlen=len : maxlen=maxlen;
continue;
}
if (s[i]== || s[i]== || s[i]==) stk[++top]=s[i];//判断插入的是否是左括号
else
{
top=len=;
memset(stk,,sizeof(stk));
}
}
printf("%d",maxlen);
return ;
}
												

CH1801 括号画家(栈模拟)的更多相关文章

  1. CH1801 括号画家

    题意 Candela是一名漫画家,她有一个奇特的爱好,就是在纸上画括号.这一天,刚刚起床的Candela画了一排括号序列,其中包含小括号( ).中括号[ ]和大括号{ },总长度为N.这排随意绘制的括 ...

  2. UVALive 7454 Parentheses (栈+模拟)

    Parentheses 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/A Description http://7xjob4.c ...

  3. 等价表达式 2005年NOIP全国联赛提高组(栈模拟)

    P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...

  4. CodeForces - 224C. Bracket Sequence (栈模拟)简单做法

    A bracket sequence is a string, containing only characters "(", ")", "[&quo ...

  5. 遇到括号就是栈(bushi)

    CF508E Arthur and Brackets 我在赛场上想都没想直接DP \(O(n^3)\)过了 但别人说正解是栈+贪心 讲讲DP \(bool\) \(dp[i][j]\)表示从第i对括号 ...

  6. HDU 1022 Train Problem I(栈模拟)

    传送门 Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of st ...

  7. UVALive 3486/zoj 2615 Cells(栈模拟dfs)

    这道题在LA是挂掉了,不过还好,zoj上也有这道题. 题意:好大一颗树,询问父子关系..考虑最坏的情况,30w层,2000w个点,询问100w次,貌似连dfs一遍都会TLE. 安心啦,这肯定是一道正常 ...

  8. poj1363Rails(栈模拟)

    主题链接: id=1363">啊哈哈,点我点我 思路: 这道题就是一道简单的栈模拟. .. .我最開始认为难处理是当出栈后top指针变化了. .当不满足条件时入栈的当前位置怎么办.这时 ...

  9. 【LintCode·容易】用栈模拟汉诺塔问题

    用栈模拟汉诺塔问题 描述 在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子.要求盘子必须按照从小到大的顺序从上往下堆 (如:任意一个盘子,其必须堆在比它大的盘子上面).同时, ...

随机推荐

  1. 20162326 齐力锋 2016-2017-2 《程序设计与数据结构》 MySort.java 实验博客

    实验代码学习编程中的问题及解决方法 代码运行成功截图 首次代码运行出现的问题截图 问题1:无法从静态上下文中引用非静态方法 问题1解决方法及思考: split方法是非静态方法,需要借助对象来调用.我查 ...

  2. 利用MacBookPro入侵无线网络

    目前无线网络的加密方式主要有WEP,WPA/WPA2.这是最常看到的加密方式,最近由于需要,专门去研究了一下如何入侵无线网络. 1.入侵WEP加密的无线网络 WEP加密方式现在已经很不安全了,因为只要 ...

  3. 在Linux系统中使用蓝牙功能的基本方法

    首先确定硬件上有支持蓝牙的设备,然后运行如下命令,就可以开到我们的蓝牙设备了: lsusb 运行hciconfig可以看到:从上图可以看出,我们的蓝牙设备是hci0运行hcitool dev可以看到我 ...

  4. Caffe2——C++ 预测(predict)Demo

    因为最近入坑Caffe2,它最近还一直在更新,所以坑比较多,官方也只给出了python的demo,C++的暂时还找不到,有也只有一个简单版的,不够用,所以就总结了一下,结合网上和自己的实践,整理了一下 ...

  5. 电脑 HOST 文件

    路径: C:\Windows\System32\drivers\etc\HOSTS

  6. dypedef 和 define

    typedef char *String_t; 和 #define String_dchar * 这两句在使用上有什么区别? 答:typedef char *String_t 定义了一个新的类型别名, ...

  7. java-给微信推送消息 利用企业微信

    目的:给关注用户推送消息 场景:自动化测试,运维监控,接口访问等报错预警.例如线上接口报错,发送提醒消息 准备工作: 1:注册企业号(为什么不用公众号呢?) 企业号注册 2:常用参数介绍: 1:COR ...

  8. Qt DLL总结

    (转自:http://qimo601.iteye.com/blog/1397936) QT动态链接库的调用方法,主要包括: 1.显式链接DLL,调用DLL的全局函数,采用Qt的QLibrary方法 2 ...

  9. web前端概念摘要(一)

    1.前端不必等后端开发完成后才开发的情况:(1)前后端分离:前后端工程不在同一工程目录,前端专注页面样式与效果开发,设计数据展示等问题,可自行建立假数据或本地数据文件测试.后期联调再做修改,修改前端人 ...

  10. LeetCode OJ:Search for a Range(区间查找)

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...