P1944 最长括号匹配

可以直接用栈模拟,把匹配好的标记一下, 最后找到最长的匹配输出即可。

如果是要求最长的长度的题那么只需要求数就行了,没必要把原序列真的按照题意改变

如果要求序列,那么只需要按照题意把答案标记出来输出即可,没必要真的一段一段找。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<stack>#define ls (p<<1)
#define rs (p<<1|1)
//#pragma GCC optimize (2)
//#pragma G++ optimize (2)
#define over(i,s,t) for(register int i = s;i <= t;++i)
#define lver(i,t,s) for(register int i = t;i >= s;--i)
//#define int __int128
#define lowbit(p) p&(-p)
using namespace std;typedef long long ll;
typedef pair<int,int> PII;const int N = 1000100;
const int mod = 1e4+7;
const double EPS = 1e-10;
const int base = 131;
int cnt,l,ansl,ansr;
string str;
int stk[N][2];
int n,m,top;
bool vis[N];
int main()
{cin>>str;int len = str.length();over(i,0,len-1){char ch =str[i];if((ch == ']'&&stk[top][0] == '[')||(ch == ')'&&stk[top][0] == '('))vis[stk[top--][1]] = vis[i] = 1;else stk[++top][0] = ch,stk[top][1] = i;}int ans = 0;over(i,0,len-1)if(!vis[i])cnt = 0,l = i+1;else {cnt++;if(cnt >ans)ans = cnt,ansl = l,ansr = i;}over(i,ansl,ansr)putchar(str[i]);return 0;
}

大佬们都是用DP做的:

//我们可以用dp【i】表示以i结尾的最长合法序列长度
//那么对于每一个元素,只需考虑它的上一个元素的长度即可
//就有dp方程:dp[i]=dp[i-1]+2+dp[i-2-dp[i-1]];
//以下是代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=100000+10;
char st[maxn];
int ans;
int dp[maxn];
int main()
{scanf("%s",st+1);int len=strlen(st+1);for(int i=1;i<=len;i++){if(st[i]=='(' || st[i]=='[')continue;if(st[i]==')' || st[i]==']'){if((st[i]==')' && st[i-1-dp[i-1]]=='(') || (st[i]==']' && st[i-1-dp[i-1]]=='[')){dp[i]=dp[i-1]+2+dp[i-2-dp[i-1]];ans=max(ans,dp[i]);}}}for(int i=1;i<=len;i++)if(dp[i]==ans){for(int j=i-ans+1;j<=i;j++)printf("%c",st[j]); return 0;}
}
//https://www.luogu.com.cn/blog/user25365/solution-p1944

注:如果您通过本文,有(qi)用(guai)的知识增加了,请您点个赞再离开,如果不嫌弃的话,点个关注再走吧,日更博主每天在线答疑 ! 当然,也非常欢迎您能在讨论区指出此文的不足处,作者会及时对文章加以修正 !如果有任何问题,欢迎评论,非常乐意为您解答!( •̀ ω •́ )✧

P1944 最长括号匹配(栈模拟/DP)相关推荐

  1. H - Streets of Working Lanterns Gym - 101149H -括号匹配-栈模拟

    H - Streets of Working Lanterns Gym - 101149H 题意:括号匹配,有很多"?",这些"?"可以凑成任意一种,判断最后能 ...

  2. 【Python】最长括号匹配问题:给定字符串,仅包含左括号‘(’和右括号‘)’,它可能不是括号匹配的,设计算法,找出最长匹配的括号子串

    最长括号匹配 示例: 给定字符串,仅包含左括号'('和右括号')',它可能不是括号匹配的,设计算法,找出最长匹配的括号子串. 算法分析 只有在右括号和左括号发生匹配时,才有可能更新最终解. 计算s[0 ...

  3. Algorithm:C++语言实现之链表相关算法(单链公共结点问题、一般LCA、括号匹配、最长括号匹配、逆波兰表达式Reverse Polish Notation、直方图矩形面积、收集雨水问题)

    Algorithm:C++语言实现之链表相关算法(单链公共结点问题.一般LCA.括号匹配.最长括号匹配.逆波兰表达式Reverse Polish Notation.直方图矩形面积.收集雨水问题) 目录 ...

  4. 括号配对问题----栈模拟

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...

  5. NyistOJ 2 括号匹配(栈)

    NyistOJ 2 括号匹配 简单的栈的应用问题,利用STL中的栈来解决,当然-也可以自己手写栈.思路就是遇到左括号进栈,遇到右括号首先判断栈是否为空,若为空直接将这个右括号进栈,当然此时也就不匹配了 ...

  6. 括号匹配(栈和队列)

    #include<iostream> #include<stack> #include<string> using namespace std; int main ...

  7. 【牛客 - 188D 】愤怒(01滚动数组优化dp,括号匹配方案个数,tricks)

    题干: 小w很生气 小w有一个长为n的括号序列 愤怒小w想把这个括号序列分为两个括号序列 小w想让分为的这两个括号序列同时合法 小w想知道一共有多少种划分方案 (划分的意思是划分为两个子序列) 注意两 ...

  8. 最长有效括号子串长度 c语言,LeetCode: Longest Valid Parentheses (求最长有效匹配括号子串的长度)...

    题目描述: Given a string containing just the characters'(' and')', find the length of the longest valid ...

  9. python实现括号匹配不用栈_使用Python实现栈,判断括号是否平衡

    栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...

最新文章

  1. 机器视觉应用软件开发步骤及流程
  2. Linux 系统学习梳理_【All】
  3. apache php隐藏头信息的方法,科技常识:nginx/apache/php隐藏http头部版本信息的实现方法...
  4. 关于Viual Studio 改变编辑器背景背景及背景图片(转)
  5. 在 WinForm 中使用 Direct2D
  6. [C++][代码库]Vector3空间向量类
  7. Django的cmdb探索与开发(三)
  8. Android App图标尺寸
  9. 坐标计算距离公式 火星坐标系_地图坐标转换 -- 火星坐标与GPS坐标
  10. 【工具篇】AS连接不上夜神模拟器
  11. LR性能测试Web Page Breakdown分析篇
  12. 数字信号和模拟信号的区别
  13. VB打造QQ批量登陆器
  14. 华为S5700交换机登录认证配置学习笔记
  15. Sklearn上机笔记--标准化
  16. 51单片机实现用一个定时器输出可调PWM
  17. 3-动态规划:数字三角形
  18. 【Doris Weekly FAQ】2021.07.05~2021.07.18
  19. 手机室内地磁定位软件_一种基于地磁的智能手机实时定位方法与流程
  20. 如何写好科研论文答案_Quiz1

热门文章

  1. 反思深度学习与传统计算机视觉的关系
  2. 阿里巴巴首部记录片问世:看哭所有创业者!
  3. 关于fastlane自动化打包
  4. Sonatype收购Vor Security,扩展对Nexus开源组件的支持
  5. Level3公司在哥伦比亚开通运营第三个数据中心
  6. Node.js连接MySQL
  7. jetty作为内嵌服务器自启动
  8. ORACLE数据库对比表结构
  9. Powershell管理系列(五)修改AD账号属性
  10. Hadoop学习笔记一