首页 > 删括号
头像 adoptions
发表于 2019-08-27 15:19:56
   简单说下题意,给定两个有若干的括号的序列s和t,问可否在s中删除若干括号对后(或者不删除),使得s序列成为t序列。    看了好多题解,思想就是动态规划,我们需要定义dp[i][j][k],dp是bool类型即可,表示序列s在前i个并且删除掉k个左括号 ‘(’ 的情况下,可以与序列t的前j 展开全文
头像 Resurgence
发表于 2022-04-25 22:40:41
删括号(谨以此篇题解纪念cjy给我灵感ac) 这道题目可以说是非常恶心了,恶心在很多东西我们从题目上看不出出来。 首先,s,t两个括号序列均合法(这一点并没有显式的说出来);其次,每次删除括号我们必须从最近的两个由内而外的删除一对或者多对。就比如说(()())这样一个序列,你不能够删除最外层的一对括 展开全文
头像 Joseph1314
发表于 2020-03-01 20:27:31
参考大佬的代码,整理一下思路。 本题有点类似编辑距离的动态规划,我们可以定义一个二维dp[][] ,dp[i][j] 表示 s字符串的前i个字符通过删除()操作,能否匹配t字符的前j个字符 操作的主体是s字符串,那么当前dp[i][j] 的有两种状态的转移: &nbs 展开全文
头像 zwlwf2
发表于 2020-01-28 21:37:34
非曰能,好学。欢迎大家一起交流学习 题目描述 链接:https://ac.nowcoder.com/acm/problem/21303 给你一个合法的括号序列s1,每次你可以删除一个"()"你可以删除0个或者多个"()"求能否删成另一个括号序列s2 问题分析 看答案,大家都用的动态规划,这里提供 展开全文
头像 hnust_leiyong
发表于 2022-08-21 20:25:15
思路借鉴楼下Joseph1314, 发现其中有些问题更正一下: 代码的初始化有些许问题,f[k][0]即s串有k位, t串没有字符时,是由可能为true的,但是其代码没有对这一部分进行初始化。详情见代码即注释。 // Problem: 删括号 // Contest: NowCoder // URL: 展开全文
头像 EntropyIncreaser
发表于 2020-02-07 23:08:49
注意这是个合法括号序列,所以我们可以看成是两颗有根树,且孩子是有先后关系的。删去一个 () 形状就等价于删去树的一个叶节点。另一个角度就是我们能否将 T2 “嵌入”到树 T1 中去。我们注意到这是一个子序列问题,所以对于 T2 的每个子树,肯定是在 T1 的子树中越靠前放进去越好。因此我们可以简单地 展开全文
头像 Felix_wjl
发表于 2023-07-24 22:10:56
这道题是我一星期前做的,当时处于一个半理解的状态,一个星期之后又拿回来复盘,发现比一个星期前更看不懂了,就花了一个半小时又重新模拟数据把思路理清,又花了一个半小时写了这份题解,每个点都批上了个人的理解,供各位热爱算法的小伙伴观看,如果有含糊不清的地方或者错误的地方评论咱们讨论讨论。 题解放在个人CS 展开全文
头像 coder+9
发表于 2021-12-04 10:34:41
很难 至少是我这个水平来看 贴一篇题解 https://blog.csdn.net/weixin_52829980/article/details/115037993 我只能勉强理解 第三层嵌套循环可以理解为枚举删除k个左括号的情况。 #include<bits/stdc++.h> us 展开全文
头像 嗯学
发表于 2020-02-26 17:45:57
dp[i][j]代表s[0-i-1]是否能删成t[0-j-1],两种情况: s末尾为右括号,则尝试删去s末尾的一个有效括号序列后缀; s,t两者末尾字符相同。 #include<bits/stdc++.h> typedef long long ll; typedef unsigne 展开全文
头像 andyc_03
发表于 2020-08-19 13:38:23
手动模拟操作过程后,可以得到有用的信息为当前进行到s串和t串的位置所以我们记f[i][j]表示s串前i为能否于t串的前j位匹配对于当前的f[i][j],我们有以下情况 s[i]=t[j] , f[i][j]=f[i-1][j-1] s[i]!=t[j] ①s[i]='(' 那么这个位置一定是无法匹 展开全文