括号

LeetCode:有效的括号【20】

被刻印的时光 ゝ 提交于 2019-12-19 03:54:12
LeetCode:有效的括号【20】 题目描述 给定一个只包括 '(' , ')' , '{' , '}' , '[' , ']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5: 输入: "{[]}" 输出: true 题目分析   我觉得这题有点难度,但是如果会 妙用栈结构的话,就会很简单 ,显然我对栈结构的理解还不够深刻。 Java题解 class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<Character>(); for (char c : s.toCharArray()) { if (c == '(') stack.push(')'); else if (c == '{') stack.push('}'); else if (c == '[') stack.push(']'); else if (stack.isEmpty() ||

数据结构(三)--栈

社会主义新天地 提交于 2019-12-18 00:32:01
/*--> */ /*--> */ /*--> */ /*--> */ 数据结构(三)--栈 通常程序开发中内存管理是非常重要的,而内存主要分为占内存和堆内存。那么栈和堆内存有什么区别呢?希望在这篇文章里能带你找到答案! 1. 栈和堆的引入 在一个简单的程序中我们定义和声明几个基本类型的变量、结构体和数组,先来直观看一下栈和堆的不同: 静态变量 和 局部变量是以压栈出栈的方式分配内存的,系统会在一个代码段中分配和回收局部变量,实际上每个代码段、函数都是一个或多个嵌套的栈,我们不需要手动管理栈区内存。 动态内存是一种堆排序的方式分配内存的,内存分配好后便不会自动回收,需要程序员手动回收。否则就会造成内存泄漏,内存越用越少。 简单了解了一下程序中内存栈与堆的区别,下面就正式开始讲数据结构中的栈。 (注意:数据结构栈、内存栈、函数调用栈三者在含义上略有不同,但是其核心思想和理念是相同的) 2. 栈的定义 栈是一种“先进后出”的一种数据结构,有压栈出栈两种操作方式。如下图: 3. 栈的分类 栈主要分为两类: 静态栈 动态栈 【静态栈】 静态栈的核心是数组,类似于一个连续内存的数组,我们只能操作其栈顶元素。 【动态栈】 静态栈的核心是数组,类似于一个连续内存的数组,我们只能操作其栈顶节点。 4. 栈的算法 栈的算法主要是压栈和出栈两种操作的算法,下面我就用代码来实现一个简单的栈。

android group by

家住魔仙堡 提交于 2019-12-17 16:18:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 比如要用实现这么一个sql语句: SELECT _id, number, date, duration, type, name, numbertype, numberlabel, COUNT(*) FROM calls GROUP BY number,type,date/8640000 ORDER BY date DESC 这个在一般的SQL编译工具里都能正常运行,在ContentRosolver中有些不一样。 用ContentRosolver中的query这么写: private static String CALLS_COUNT = "calls_count"; static final String[] CALL_LOG_PROJECTION = new String[] { Calls._ID, Calls.NUMBER, Calls.DATE, Calls.DURATION, Calls.TYPE, Calls.CACHED_NAME, Calls.CACHED_NUMBER_TYPE, Calls.CACHED_NUMBER_LABEL, "COUNT(*) AS " + CALLS_COUNT }; String selection = " 0==0) GROUP BY ("+ Calls

jmeter 正则提取器

旧时模样 提交于 2019-12-17 14:26:06
最近在使用Jmeter自动获取网页图片地址的时候,使用了正则表达式提取器,这里通过三个例子记录下来正则表达式提取器的高级用法。一来作为自己的备忘,二来也分享出来,供那些需要用到这些功能的朋友参考。 举例一:单模板单数据 定义说明: 引用名称:image表示变量名,不用多说 正则表达式:这里的一对括号就是一个模板,两对括号就是两个模板,….. 模板:这里要告诉Jmeter你要匹配哪个或哪些模板,$1$表示匹配第一个模板(就是正则表达式里的第一对括号) 匹配数字:告诉Jmeter如果匹配到了多个符合要求的,你要哪一个?这里我填写-1,表示获取全部匹配的数据 0表示随机 -1表示全部 1表示第一个 2表示第二个 …… 缺省值:没有匹配到数据时的默认值,不用多说。 好了,正则表达式提取器的定义已经完成,下面看看如果使用: 使用说明: 由于我们在匹配数字里填写了-1,匹配到的是多个值,我们就可以通过 ${变量名_坐标} 的方式获取: ${image_1}表示第一个匹配到的 ${image_2}表示第二个匹配到的 ….. 举例二:多模板单数据 定义说明: 引用名称:label表示变量名,不用多说 正则表达式:这里的一对括号就是一个模板,两对括号就是两个模板,我们使用了两个模板 模板:这里要告诉Jmeter你要匹配哪个或哪些模板,$1$,$2$表示同时匹配第一个和第二个模板的数据 匹配数字

【转】中缀表达式转换为后缀表达式

血红的双手。 提交于 2019-12-17 10:47:35
一、后缀表达式求值 后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。假定待求值的后缀表达式为:6 5 2 3 + 8 * + 3 + *,则其求值过程如下: 1)遍历表达式,遇到的数字首先放入栈中,此时栈如下所示: 2)接着读到“+”,则弹出3和2,执行3+2,计算结果等于5,并将5压入到栈中。 3)读到8,将其直接放入栈中。 4)读到“*”,弹出8和5,执行8*5,并将结果40压入栈中。而后过程类似,读到“+”,将40和5弹出,将40+5的结果45压入栈...以此类推。最后求的值288。 二、中缀表达式转后缀表达式 2.1)规则 中缀表达式a + b*c + (d * e + f) * g,其转换成后缀表达式则为a b c * + d e * f + g * +。 转换过程需要用到栈,具体过程如下: 1)如果遇到操作数,我们就直接将其输出。 2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中。 3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。注意,左括号只弹出并不输出。 4)如果遇到任何其他的操作符,如(“+”, “*”,“(”)等,从栈中弹出元素直到遇到发现更低优先级的元素(或者栈为空)为止。弹出完这些元素后,才将遇到的操作符压入到栈中。有一点需要注意,只有在遇到" ) "的情况下我们才弹出" ( "

手撕leetcode第20题之有效括号

喜欢而已 提交于 2019-12-17 04:21:07
题目 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: “()” 输出: true 示例 2: 输入: “()[]{}” 输出: true 示例 3: 输入: “(]” 输出: false 示例 4: 输入: “([)]” 输出: false 示例 5: 输入: “{[]}” 输出: true 分析 首先审题,字符串只包含开括号或者闭括号,判断括号是否有效。其实这道题很好想到采用栈来解决,遇到开括号入栈,闭括号取出栈顶的开括号比较与闭括号是否同一类型。如果是同一类型弹出栈顶的开括号,遍历完字符串后,如果栈为空,则证明字符串为有效字符串。 代码实现 /** * 判断有效字符串 时间复杂度是O(n) 空间复杂度O(m) * @param s * @return */ private boolean isValid ( String s ) { if ( "" . equals ( s ) ) { return true ; } Stack < Character > stack = new Stack < > ( ) ; int length = s . length ( ) ; for ( int

leetcode20:有效的括号

久未见 提交于 2019-12-16 13:52:18
题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5: 输入: "{[]}" 输出: true C++解法: class Solution { public: bool isValid(string s) { string s1 = "{}"; string s2 = "[]"; string s3 = "()"; while (s.find(s1) != std::string::npos || s.find(s2) != std::string::npos || s.find(s3) != std::string::npos) { while (s.find(s1) != std::string::npos) { s = s.replace(s.find(s1), 2, ""); } while (s.find(s2) != std::string::npos) { s = s

10款好用到爆的Vim插件

风流意气都作罢 提交于 2019-12-16 03:29:47
1. Volt Volt是一个插件管理器,你可以通过它来安装插件并创建名为“配置文件”的插件组合,Volt仍然相对较新,所以还不够完美(例如,每个插件只能有一个配置文件),但除此之外,我发现它非常方便、非常快、非常简单。 2. Vim-Rainbow 几乎所有主流的编程语言都需要用到方括号,圆括号,花括号等,通常,我们会使用多对的括号,要弄清楚哪个右括号属于哪个左括号可能会变得困难和烦人。而vim-rainbow插件会给每一对括号加一个独特的颜色,这样你就很容易辨认了,而且它不仅很有用,也会让你的代码变得丰富多彩 3. lightline Vim的插件有很多,比如Powerline,它在屏幕的底部放一个栏,告诉你你在处理什么文件,你在文件的什么位置,它是什么类型的文件等等,每个插件都有优点和缺点,在权衡之下,我最后选择了lightline。它相对较小,易于设置,如果你对这类东西感兴趣,它具有相当的可扩展性,并且不需要任何其他工具或插件。 4. NERDTree 该插件显示一个目录树,可以执行文件的操作命令。在大型项目中,你很难找到你要编辑的那一行的文件确切名称和位置。通过快捷键,一个资源管理器窗口就会以目录树的方式打开,你可以轻松找到你想要的文件并打开它,假如你有大量代码或者容易忘记文件名的人,NERDTree是必须要有的 5. NERD Commenter 有时

母函数简单实现

浪尽此生 提交于 2019-12-15 13:41:46
转自: Preeee 1.以一个问题为引例:重量为1,3,5g的砝码各两个,可以称出多少种重量不同的物品? 构造母函数G(x)=(1+x+x^2)(1+x^3+x^6)(1+x^5+x^10),其中x的指数表示砝码的重量,x表示砝码。 每个括号里代表的状态是取0个、取1个、取2个。 得到的各个x^n前面的系数就是每种质量可以称出的方案数目。所得式子的个数就代表可以称出多少种的重量。 2.再看另一种情况:重量为1,3,5g的砝码,可以称出某种质量的方案数目是多少? 构造母函数G1(X)=(1+x+x^2+x^3+......)(1+x^3+x^6+x^9+......)(1+x^5+x^10+x^15+......) 若质量为n,则x^n前面的系数就是方案数目。 以一个题为例:1、2、3、4.....元的面值可以组成面值为n的方案数有多少? 超级详细代码加思想: #include <iostream> using namespace std; const int _max = 10001; // c1是保存各项质量砝码可以组合的数目 // c2是中间量,保存没一次的情况 int c1[_max], c2[_max]; int main() { int nNum; //你想用已有的面值组成nNum大小的面值 int i, j, k; //该代码的前提是假设所有面值为1、2、3、4、5元

20.有效括号

只愿长相守 提交于 2019-12-15 06:26:43
1.题目描述:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 2.示例: 输入:{}[]() 输出:true 输入: "([)]" 输出: false 3.思路:可以采用栈来解决, 第一步:判断栈是否空,为空则进一个括号,若不为空,则判断当前括号和栈顶元素是否匹配,不匹配则当前括号入栈;匹 配则当前括号不入栈,栈顶元素弹栈。 第二步:判断括号是否匹配(可以用ASCLL码,'('-')'=-1 , '{'-'}'=-2 , '['-']'=-2)。 第三步:判断栈是否为空,为空则括号匹配,不为空则括号不匹配。 4.代码如下: class Solution { public boolean isValid(String s) { Stack<Character> stack =new Stack(); for(int i=0;i<s.length();i++){ if(stack.empty()){ stack.push(s.charAt(i)); //入栈 }else{ //括号是否匹配 if((stack.peek()-s.charAt(i))==-1 || (stack.peek()-s.charAt(i))==-2){ stack.pop();