括号

Leetcode 20 有效括号

六月ゝ 毕业季﹏ 提交于 2020-01-31 04:18:34
Leetcode 20 有效括号 很经典的一道利用栈的题目,而且在 python 中,利用 list 数据结构的 append 与 pop 函数就可以轻松的做到实现栈: 思路如下: 如果碰到左括号,则直接压入栈中 如果碰到右括号,则判断栈顶是否是对应的左括号(比如 “)” 与 “(” )。如果是,则将栈顶;如果不是,则将右括号压入栈中。 (注:在这里我是先都压进去,然后判断是否需要将栈顶两个元素同时pop出来,来实现的) 所有元素运行完后,如果栈为空,则为有效括号,如果栈非空,则为无效括号。 代码 代码如下: def isValid ( s ) : lst = [ ] for i in s : lst . append ( i ) if len ( lst ) == 1 : continue else : a = lst [ - 2 ] b = lst [ - 1 ] if a == "(" : if b == ")" : lst . pop ( ) lst . pop ( ) elif a == "[" : if b == "]" : lst . pop ( ) lst . pop ( ) elif a == "{" : if b == "}" : lst . pop ( ) lst . pop ( ) if not lst : return True else : return

Python带括号的计算器

穿精又带淫゛_ 提交于 2020-01-31 03:25:01
带括号的计算器也是第一个自我感觉完成最好的 毕竟真的弄了一个多星期 虽然前期这路真的很难走 我会努力加油 将Python学好学踏实 参考了两位博主的文章 http://www.cnblogs.com/0zcl/p/5983236.html http://www.cnblogs.com/loyfee/p/5764926.html#3538071 大致过程就是 先将输入的数据转为列表 当中去除空字符 接着找出最里层括号 进行运算 再将结果放回列表 最后算出结果 import re #data = input("请输入算术:") def change_list(data): data =re.sub(" ","",data)#将空格转为"" # print(data) data_list = [] for i in data: data_list.append(i) num = 0 try: while 1: if data_list[0] == "-": data_list[0] = data_list[0] + data_list[1] data_list.pop(1) if data_list[num].isnumeric(): if data_list[num+1].isnumeric(): data_list[num] = data_list[num]+data_list

bash之花括号扩展(brace expansion )

瘦欲@ 提交于 2020-01-30 16:32:31
bash的所有扩展(expansion)如下: Brace Expansion(花括号扩展) Tilde Expansion(波浪号扩展) Parameter and Variable Expansion (参数和变量扩展) Command Substitution(命令置换) Arithmetic Expansion(算数扩展) Word Splitting(单词分割) Pathname Expansion(路径扩展) 上面列举的顺序正是bash在扩展时的顺序 花括号展开的定义(Brace Expansion) 花括号扩展也称大括号扩展,是可以让bash生成任意字符串的一种扩展功能。它与“路径扩展”非常相似,唯一不同的是生成的字符串可以是不存在的路径或者文件名 在bash中,花括号扩展在诸多扩展中优先级最高,因此类似于echo {a,b}$PATH的语句在完成花括号扩展之后的结果应该为 a$PATH b$PATH,而对PATH环境变量的扩展要到后续的“参数和变量扩展”阶段才开始 花括号扩展的两种格式 3.1 第一类格式为: preamble+{string1,string2,string3,...,stringN}+postcript 左右的花括号是必须的,中间的字符串列表分别由逗号隔开,注意逗号前后不能有空格,如果string中有空格,则需要单引号或者双引号扩起来

C++11 右尖括号>的改进

一世执手 提交于 2020-01-30 02:59:09
【1】右尖括号>的改进 在C++98中,有一条需要规避的规则: 如果在实例化模板的时候出现了连续的两个右尖括号>,那么它们之间需要一个空格来进行分隔,以避免发生编译时的错误。示例如下: 1 // 示例1:嵌套的模板标识 2 template <int i> class X {}; 3 template <class T> class Y {}; 4 Y<X<1> > x1; // 编译成功 5 Y<X<1>> x2; // 编译失败 6 7 // 示例2:强制转换 8 const vector<int> v = static_cast<vector<int> >(v); // 编译成功 9 const vector<int> v = static_cast<vector<int>>(v); // 编译失败 如此的限制,在C++11新标准中被取消了。 但是,这些“智能”的判断也会带来一些与C++98的有趣的不兼容性。 比如用户只是想让>>在模板的实例化中表示的是真正的右移,但是C++11会把它解析为模板参数界定符。示例如下: 1 template <int i> class X {}; 2 X < 1 >> 5 > x; // 编译失败 3 X <(1 >> 5)> x; // 编译成功 使用C++98标准进行编译的话,这个例子会编译通过。 因为编译器认为X<1>>5>x

20_有效的括号

本秂侑毒 提交于 2020-01-30 00:07:02
Leetcode 20:有效的括号 题目 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5: 输入: "{[]}" 输出: true 思路 这是一道使用stack这种结构的典型例题。我们可以先建立这样一个map {'{':'}', '[':']', '(':')'} 然后我们对输入的字符串入栈操作(如果入栈的元素是key的话) ()[]{} stack: ( map['(']=')' 依次比较直到出现不匹配或者所有元素都比较结束。这里我们还要注意这样的问题 ()[]{}( 这个时候直到string的末尾,我们的stack种还有一个元素(。所以我们最后还要判断一下len(stack)==0。 答案 class Solution : def isValid ( self , s ) : """ :type s: str :rtype: bool """ stack = list ( ) match = { '

算法:最长有效括号【字符串、动态规划】

佐手、 提交于 2020-01-29 03:35:33
最长有效括号 Category Difficulty Likes Dislikes algorithms Hard (28.90%) 451 - Tags Companies 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: “(()” 输出: 2 解释: 最长有效括号子串为 “()” 示例 2: 输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()” 分析 利用动态规划,构建dp[],dp[i]表示str[0…i]强制以i结尾时的最长有效子串长度。 如果遍历到左括号,直接为0 如果遍历到右括号,需考虑两个值:i-dp[i-1]-1和i-dp[i-1]-2 i-dp[i-1]-1是该右括号要匹配的值,该值必须为左括号,否则有效子串长度为0 i-dp[i-1]-2是该右括号要匹配的值的前一个,有效子串需要加上该位置对应值。 /* * @lc app=leetcode.cn id=32 lang=java * * [32] 最长有效括号 */ // @lc code=start class Solution { public int longestValidParentheses ( String s ) { char [ ] chars = s . toCharArray ( ) ; int [ ] dp

606. Construct String from Binary Tree

感情迁移 提交于 2020-01-28 02:29:52
606. 根据二叉树创建字符串 你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。 空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。 示例 1: 输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)" 解释: 原本将是“1(2(4)())(3())”, 在你省略所有不必要的空括号对之后, 它将是“1(2(4))(3)”。 示例 2: 输入: 二叉树: [1,2,3,null,4] 1 / \ 2 3 \ 4 输出: "1(2()(4))(3)" 解释: 和第一个示例相似, 除了我们不能省略第一个对括号来中断输入和输出之间的一对一映射关系。 解法一 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: string tree2str(TreeNode* t) { if(!t) return ""; string s1 =

1203:扩号匹配问题

只谈情不闲聊 提交于 2020-01-28 01:35:19
【题目描述】 在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注。 【输入】 输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100。 【输出】 对每组输出数据,输出两行,第一行包含原始输入字符,第二行由"$","?"和空格组成,"$"和"?"表示与之对应的左括号和右括号不能匹配。 【输入样例】 ((ABCD(x) )(rttyy())sss)( 【输出样例】 ((ABCD(x) $$ )(rttyy())sss)( ? ?$ #if(1) /*#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <cstring> #include <stack>*/ #include <bits/stdc++.h> #define A 1000+5 using namespace std; const int maxn=100+5; int ans=0;

java实现括号匹配算法

你说的曾经没有我的故事 提交于 2020-01-27 17:32:16
package Bracket ; import java . util . ArrayList ; public class Stack { ArrayList < Character > list = new ArrayList < > ( ) ; public void push ( Character s ) { //将左括号压入栈中 list . add ( s ) ; } public void pop ( ) { //将匹配到的左括号弹栈 list . remove ( list . size ( ) - 1 ) ; } public boolean isEmpty ( ) { //判断栈是否为空 return list . isEmpty ( ) ; } } package Bracket ; import java . util . Scanner ; public class Bracket { public static void main ( String [ ] args ) { boolean flag = true ; Stack stack = new Stack ( ) ; Scanner in = new Scanner ( System . in ) ; System . out . println ( "请输入只包含\"(\",\")\

C++——尖括号和引号的区别

岁酱吖の 提交于 2020-01-27 06:18:32
<>:C++编译器将在存储标准头文件的主机系统的文件系统中查找。 " ":编译器将首先查找当前的工作目录或源代码目录(或其他目录,这取决于编译器)。如果没有在那里找到头文件,则将在标准位置查找。 所以,在包含自己的头文件时,应使用" "。 来源: CSDN 作者: acmwss 链接: https://blog.csdn.net/acmwss/article/details/103703947