括号画家

Posted hhyx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了括号画家相关的知识,希望对你有一定的参考价值。

# 题意

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

 

以上是关于括号画家的主要内容,如果未能解决你的问题,请参考以下文章

#18. 括号画家——Yucai OJ第16次测试

如何理解这段代码片段中的两对括号?

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

vue2.0 代码功能片段

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

当我在括号中调用它时,Thymeleaf 不会解析我的应用程序中的片段。这是为啥?