括号

用python实现括号匹配

扶醉桌前 提交于 2019-11-26 13:23:01
BRACKET = {'}': '{', ')': '(', ']': '['} BRACKET_L, BRACKET_R = BRACKET.values(), BRACKET.keys() def Check_bracket(s): arr = [] for c in s: if c in BRACKET_L: # 左括号入栈 arr.append(c) elif c in BRACKET_R: # 右括号,要么栈顶元素出栈,要么匹配失败 if arr and arr[-1] == BRACKET[c]: arr.pop() else: return False return True print(Check_bracket("((()))((()))")) 来源: https://blog.csdn.net/miaomiao_zhang/article/details/98875975

2019暑假集训 括号匹配

纵然是瞬间 提交于 2019-11-26 13:03:29
题目描述 Hecy 又接了个新任务:BE 处理。BE 中有一类被称为 GBE。 以下是 GBE 的定义: 空表达式是 GBE 如果表达式 A 是 GBE,则 [A] 与 (A) 都是 GBE 如果 A 与 B 都是 GBE,那么 AB 是 GBE 下面给出一个 BE,求至少添加多少字符能使这个 BE 成为 GBE。 输入 输入仅一行,为字符串 BE。 输出 输出仅一个整数,表示增加的最少字符数。 样例输入 []) 样例输出 1 提示 对于100%的数据,输入的字符串长度小于100。 很明显是区间dp(和LCS问题类似) 按照区间dp的正常方法,我们不难发现,用dp[x][y]表示从x到y的区间 已经匹配 的字符数时, (我不会说因为如果表示最少需增加括号数目我不会做的)从两个位置转移: (1)因为A是GBE-------->[A]和(A)是GBE 则若x、y两个位置可以构成一对括号则dp[x][y]=dp[x+1][y-1]+2 (因为是两个已经匹配过的括号); (2)因为A、B是GBE--------->AB是GBE 则枚举xy中区间断点k并用dp[x][k]+dp[k+1][y]更新dp[x][y]; 所以我们得到了如下代码: #include<iostream> #include<cstdio> #include<cstring> using namespace std;

LeetCode.20 有效的括号

徘徊边缘 提交于 2019-11-26 02:52:37
题目链接: 有效的括号 分析: 这里需要使用栈来进行操作 括号共分为三种:( )、{ }、[ ] 若要进行括号匹配,只需要把左括号全部压入栈中,再用右括号进行匹配 ( 遇到左括号压入栈,遇到右括号去进行判断匹配 ) 栈中的元素不停的弹出,然后和右边的括号进行匹配 例如:栈中的元素是这样: ( { [ 此时的栈顶元素应该是 [ ,后面的括号用来和弹出的栈顶元素 [ 进行匹配 若匹配成功,则再次弹出元素,若匹配不成功,直接返回false 等到最后(此时还未弹出false,表示之前的括号都匹配成功),如果循环结束,栈中没有元素则表示全部匹配成功 代码实现: public class ValidParentheses { public static boolean isValid(String s) { //1、申明一个stack Stack<Character> stack = new Stack<Character>(); //遍历 s String本质上是char[] for(int i = 0 ; i < s.length() ; i++){ char c = s.charAt(i); if(c == '{' || c == '[' || c == '('){ //如果是{ [ ( 压入栈中 stack.push(c); }else{ // } ] ) 进行比对 //

从浏览器到栈

血红的双手。 提交于 2019-11-25 20:27:19
从浏览器到栈 从浏览器到栈 栈是什么? 如何实现一个栈? 栈的应用 表达式 括号匹配 浏览器 补充 栈是什么? 说到栈我们总是先想到 FILO (first in last out), 有没有什么更贴切一点的例子呢? 有了,洗盘子其实和栈很像,我们总是从盘子的顶部拿起盘子,第一个放的盘子是最后一个拿出来的,符合FILO, 这样我们就能很自然地理解 栈 (stack),这种数据结构咯。 如何实现一个栈? 上面我们讲了什么是栈,那让我们动手实现一个吧。实现栈,我们既可以用数组,也可以用链表。前一种叫做 顺序栈 ,后一种则是 链式栈 . 代码 // 基于数组实现的顺序栈 class ArrayStack{ private String[] items; private int count; // 栈中元素个数 private int n; // 栈的大小 // 初始化数组,申请一个大小为n的数组空间 public ArrayStack(int n){ this.items = new String[n]; this.n = n; this.count = 0; } // 入栈 public boolean push(String item){ if(count==n) return false; items[count] = item; ++count; return true; } /