括号

POJ 1068 题解

北城余情 提交于 2020-01-26 19:35:07
这是没什么用的目录 原题地址 AC代码 题解和思路 原题地址 这是地址 AC代码 #include < iostream > #include < vector > #include < algorithm > using namespace std ; int main ( ) { int t ; cin >> t ; for ( int i = 0 ; i < t ; ++ i ) { int n ; cin >> n ; vector < char > kuohao ; int temp = 0 ; for ( int j = 0 ; j < n ; ++ j ) { int a ; cin >> a ; for ( int k = 0 ; k < a - temp ; ++ k ) { kuohao . push_back ( '(' ) ; } temp = a ; kuohao . push_back ( ')' ) ; } vector < char > : : iterator it = kuohao . begin ( ) ; while ( it != kuohao . end ( ) ) { if ( * it == '(' ) { it ++ ; continue ; } else { int num = 1 ; int counter = 1 ;

Java堆栈的应用2----------中缀表达式转为后缀表达式的计算Java实现

穿精又带淫゛_ 提交于 2020-01-25 09:34:51
1、堆栈-Stack 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作。 堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈。 Java中已经出了Stack的具体实现类 堆栈的数据集合可以表示为a0,a1,…,an-1,每个数据元素的数据类型可以是任意的类类型。 操作集合  (1)入栈push(obj):把数据元素obj插入堆栈。  (2)出栈pop():出栈, 删除的数据元素由函数返回。  (3)取栈顶数据元素getTop():取堆栈当前栈顶的数据元素并由函数返回。 (4)非空否notEmpty():若堆栈非空则函数返回true,否则函数返回false。 堆栈是各种软件系统中应用最广泛的数据结构之一。括号匹配和表达式计算是编译软件中的基本问题,其软件设计中都需要使用堆栈。 首先来看应用之一: 中缀表达式转为后缀表达式 1、前缀表达式(Prefix Notation)是指将运算符写在前面操作数写在后面的不包含括号的表达式,而且为了纪念其发明者波兰数学家Jan Lukasiewicz所以前缀表达式也 叫做“波兰表达式”。比如- 1 + 2 3 2、后缀表达式

python函数

非 Y 不嫁゛ 提交于 2020-01-25 04:18:24
函数是什么?为什么要有函数? 所以的代码编程都是显示生活中的映射,你可以这样想,在生活中大家都用过洗衣机,有的一些洗衣机需要你自己去加水,排水,加洗衣液,等等....,python中的函数就相当于一台自动洗衣机,你只需要按下(调用)按钮,洗衣机就会自动帮你加水排水,加洗衣液,最后帮你甩干.函数存在的意义就是当我们以后需要再洗衣服的时候只需要一键启动洗衣机即可帮我们完成一系列的事情. 那python中的函数怎么写呢? 用关键字def去定义一个函数: 函数里面的功能都需要缩进到函数体里面 1 def fun(): 2 print("讲衣服放到洗衣机里" 3 print("按下启动按钮") 4 fun() # 调用,执行函数 实现一个简单的函数 总结一: 定义: def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。    def 是固定的,不能变,必须是连续的def三个字母,不能分开。。。它们要相亲相爱的在一起。    空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。    函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能    括号:是必须加的,先别问为啥要有括号,总之加上括号就对了! 注释:

python之路——初识函数

只愿长相守 提交于 2020-01-25 04:17:13
python之路——初识函数 阅读目录   为什么要用函数   函数的定义与调用   函数的返回值   函数的参数   本章小结 为什么要用函数 我们就想啊,要是我们能像使用len一样使用我们这一大段“计算长度”的代码就好了。这种感觉有点像给这段代码起了一个名字,等我们用到的时候直接喊名字就能执行这段代码似的。要是能这样,是不是很完美啊? 初识函数定义与调用 总结一: 定义: def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。    def 是固定的,不能变,必须是连续的def三个字母,不能分开。。。它们要相亲相爱的在一起。    空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。    函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能    括号:是必须加的,先别问为啥要有括号,总之加上括号就对了! 注释: 每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。 调用: 就是 函数名() 要记得加上括号,好么好么好么。 参数总结: 阅读目录   为什么要用函数   函数的定义与调用   函数的返回值   函数的参数   本章小结 为什么要用函数 我们就想啊

Leetcode 20题 有效的括号(Valid Parentheses) Java语言求解

让人想犯罪 __ 提交于 2020-01-24 15:56:01
题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 做法 使用栈来进行辅助求解。 1、创建一个空栈; 2、使用循环对字符串进行遍历转3,遍历完毕退出循环转7; 3、如果当前字符为'('、'{'、'['则进栈,转2; 4、如果当前字符为')'、'}'、']',转5; 5、如果栈为空,则返回false,匹配不成功,结束程序;栈不空,转6; 6、弹出栈顶元素,如果栈顶元素不是与当前遍历到的字符相匹配的括号,则返回false,匹配不成功,结束程序;否则转2; 7、如果栈为空,则匹配成功,返回true,程序结束;否则返回false,匹配不成功,程序结束。 import java.util.Stack; class Solution { public boolean isValid(String s) { Stack<Character> stack_match = new Stack<Character>(); for(int i=0;i<s.length();i++){ if(s.charAt(i)=='(' || s.charAt(i)=='[' || s.charAt(i)=='{'){ stack_match

关于后缀表达式和中缀表达式的思考

我们两清 提交于 2020-01-23 02:28:43
众所周知啦,我们数学里面的公式就是中缀表达式(infix),形如a*(b+c),支持括号用于调整运算的顺序。我们平常用的就是中缀表达式。 那么什么是后缀表达式(postfix)? 后缀表达式(又称为逆波兰reverse polish)就是不需要括号就可以实现调整运算顺序的一种技法。 比如:ab+cde+** 上面就是一个典型的后缀表达式,将它改为中缀表达式其实是(a+b)*((d+e)*c)。我们这样将后缀表达式转换成中缀表达式,虽然符合我们的数学计算习惯,但是并不符合计算机运算的方式。我们可以通过数据结构中的栈来理解后缀表达式和它为什么符合计算机计算。 什么是栈(stack)呢?简单的说就是LIFO(后入先出)。画一张图就是下面这样 堆栈的操作其实很简单,你可以把堆栈想象成一个汉诺塔,你可以在塔顶不断加上汉诺圈,可以从顶部一个一个拿走,但是你不能直接从下面拿走最先放的那个圈。所以你懂了吧,要想拿到最先那个,你必须取出所有的圈,而你最后摆上去的圈可以被立刻拿到。这就是LIFO的本质。 堆栈的实现方法可以是链表或者数组。它们各有各得优点,它们的对比网络上有很多啦,当然我以后也会写出来。 现在你知道了栈这种结构就可以重新理解一遍后缀表达式。我们就以 "ab+cde+**" 这个表达式举例。我们创建一个栈,然后从这个表达式开头(当然是从左边)扫描,如果扫描到的是数据就压(push)到栈中

1021. 删除最外层的括号

偶尔善良 提交于 2020-01-22 04:20:16
栈的用处, 当遍历的时候,后续元素的操作根据前面元素的状态而不同时, 即我们需要存储前面的元素来判断对后面元素的操作, 也可以根据后面的元素状态对前面的元素进行二次操作。 比如删除最外层的括号这一题, 遇到左括号,我们把它入栈,遇到之后的括号, 我们需要根据它的状态而对之前存储的元素进行操作,比如我们遇到了右括号,那么我们就得到一个删除栈顶的左括号。 可以看出,在这里,我们的栈中保存的都是左括号,而对于原语来说最重要的莫过于第一个左括号的位置,我们从第一个左括号之后遍历,而第一个左括号的寿命直到我们遍历完一个完整的原语。所以之前元素的状态很重要, 这时我们就需要栈 。 算法思想: “ 不存” 比 “存了再删” 更高级。 遍历最好做一次,不用先把有效数字加工好存放好,再遍历,多一次遍历的时间也是没有必要的。 不要放过题目给的信息,有些信息有助于想出更简单的函数。 Hashmap ; 当遇到一个集合与另一个集合有多次比较的功能情况,建议使用 hashmap 。当然这个比较最终都要能化为一一对应的关系。 来源: CSDN 作者: 芒骁 链接: https://blog.csdn.net/qq_44587855/article/details/103985450

括号匹配并标注(栈)

只谈情不闲聊 提交于 2020-01-21 12:32:56
题目描述: 在某个字符串(长度不超过100)中有左括号、右括号和大小写字母; 规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。 写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。 不能匹配的左括号用"$“标注,不能匹配的右括号用”?"标注. 输入: 输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100。 注意:cin.getline(str,100)最多只能输入99个字符! 输出: 对每组输出数据,输出两行,第一行包含原始输入字符,第二行由$,?和空格组成,$和?表示与之对应的左括号和右括号不能匹配。 样例输入: )(rttyy())sss)( 样例输出: )(rttyy())sss)( ? ? $ # include<iostream> # include<string> # include<vector> # include<algorithm> # include<cmath> # include<cstdio> # include<map> # include<stack> using namespace std; void clearStack(stack<char>& s) { while(!s.empty()) { s.pop(); } }

有效的括号

China☆狼群 提交于 2020-01-21 04:40:50
一天一道算法之有效的括号 用python实现 用python实现 def isValid(self,s:str) ->bool: dic = {'(':')','[':']','{':'}','?':'?'} stack = ['?'] for c in s: if c in dic:stack.append(c) elif dic[stack.pop()] != c:return False return len(stack) == 1 来源: CSDN 作者: harveychenhf 链接: https://blog.csdn.net/harveychenhf/article/details/104050629

OJ题-括号匹配问题(力扣)

空扰寡人 提交于 2020-01-20 18:21:35
题目: 思路:无效的括号匹配:左(右)括号多,左右不匹配 遍历字符串的每个字符:若是左括号:入栈; 若是右括号则判断:栈是空的(不匹配:右括号多了) 出栈:若左右括号不匹配:不匹配 否则继续循环 若栈不为空:不匹配 否则匹配 Stack stack=new Stack(); stack.push(c); //压栈 stack.pop(); //出栈 char c=stack.top(); //获取栈顶元素 class Solution { public boolean isValid ( String s ) { ArrayList < Character > stack = new ArrayList < > ( ) ; //申请栈 for ( int i = 0 ; i < s . length ( ) ; i ++ ) { //遍历所有字符串 char c = s . charAt ( i ) ; //取出来 //判断左、右括号 switch ( c ) { //左括号压栈 case '(' : case '[' : case '{' : stack . add ( c ) ; break ; case ')' : //右括号出栈 case ']' : case '}' : { if ( stack . isEmpty ( ) ) { return false ; }