码迷,mamicode.com
首页 > 其他好文 > 详细

括号画家

时间:2020-03-15 09:27:40      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:一段   color   span   长度   子序列   long   syn   pre   har   

# 题意

一共有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 }

 

括号画家

标签:一段   color   span   长度   子序列   long   syn   pre   har   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!