括号

Python学习笔记九:正则表达式

一世执手 提交于 2020-02-13 01:07:03
一:正则表达式的符号与方法 常用符号: .:匹配任何一个字符,换行符除外(所以,多行字符串中的匹配要特殊处理,见下面实例) *:匹配前一个字符0次或多次 +:匹配前一个字符1次或多次 ?:匹配前一个字符0次或1次 {n,m}:匹配前一个字符n次~m次 ():小括号内容作为结果返回 []:匹配[]内任一元素 .*:贪心匹配,匹配任何一个字符0次或多次 .*?:非贪心匹配 (.*?):把括号内的匹配内容作为结果返回 \w:匹配包括下划线的任何 单词字符(即不是特殊符号的字符,符号字符是!@#?之类) ,相当于[A-Za-z0-9_] \d:匹配任意数字,等价于 [0-9] \W:匹配 非单词字符 。 \D:匹配 非数字 。 ^:模式取非。 常用方法: findall():匹配符合规则的内容,结果以列表形式返回 search():匹配第一个符合规则的内容,并返回一个正则表达式对象 sub():替换符合规则的内容,返回替换后的值 实例: # . 的使用:充当一个占位符,一个.代表一个符号 a="xz123" b=re.findall("x.",a) #第一个参数为查找规则,第二个参数为被查找对象 print b 结果:. 被赋予了具体内容 ['xz'] # * 的使用:代表前一个字符出现0次或多次 a="xyxy123" b=re.findall("x*",a) print b 结果

Source Insight 常用设置和快捷键大全

最后都变了- 提交于 2020-02-12 12:54:17
Source Insight 常用设置和快捷键大全 摘自:https://www.cnblogs.com/bluestorm/archive/2012/10/28/2743792.html Source Insight 4.0 文件类型、编码格式、tab转空格、tab键自动补全设置。。。 http://www.cnblogs.com/bluestorm/p/6864540.html 1.括号配对高亮: “在前括号左侧,后括号左侧” 双击鼠标左键,可以选定匹配括号和其中内容(<>,(),L{R},[]之间) 2.让{ 和 } 不缩进: Options -> Document Options -> Auto Indenting -> Auto Indent Type 选 Simple 还有:让{ 和 } 不缩进: options->document options->auto indent 去掉indent Open Brace和Indent Close Brace。 (不好使,括号无法配对对齐!) 3.添加文件类型 用户可以定义自己的类型,Options->Document Options->add type,定义文件类型名以及文件名后缀。 勾选include when adding to projects在添加目录下文件到工程是该类文件就会添加进SI的工程。

一本通 1572:括号配对

☆樱花仙子☆ 提交于 2020-02-12 08:29:48
\(\quad\) 一开始以为这真是个括号匹配,写了个栈,甚至用了 STL。 #include <stdio.h> #include <string.h> #include <stack> int ans = 0, len; char str[1 << 7]; std::stack<bool>stack; int main(){ scanf("%s", str); len = strlen(str); for(int i = 0; i < len; ++i) if(str[i] == '(' || str[i] == '[') stack.push(str[i] == '('); else{ if(str[i] == ')'){ if(stack.empty() || !stack.top()) ++ans; else stack.pop(); } else{ if(stack.empty() || stack.top()) ++ans; else stack.pop(); } } ans += stack.size(); printf("%d\n", ans); return 0; } \(\quad\) 结果只有 \(40\) 分。想了好久,想出了反例。 ([) \(\quad\) 以上字符串一个匹配的括号都没有,但实际上只需要增加 \(1\) 个字符。正确的做法是: \(

中缀表达式转后缀表达式画图详解和代码实现

雨燕双飞 提交于 2020-02-11 18:34:32
中缀表达式转后缀表达式思路步骤分析 : 1 初始化两个栈:运算符栈s1和存储中间结果的栈s2 2 从左至右扫描中缀表达式 3 遇到运算符时,比较其与s1栈顶运算符的优先级 3.1 如果s1为空,或栈顶运算符为左括号’(’,则直接将此运算符入栈; 3.2 否则,如果优先级比栈顶运算符的高,也直接将此运算符入栈; 3.3 否则,将s1栈顶的运算符弹出并压入s2中。然后又从3.1步开始进行比较(此时带入栈的操作符还是之前那个,只是栈顶元素已变更) 4 遇到操作数时,将其压入s2 5 遇到括号时 5.1 如果是左括号’(’,则直接压入s1 5.2 如果是右括号’)’,则依次弹出s1栈顶的运算符,并压入s2中,直到遇到左括号’('为止,将这个左括号从s1中弹出丢弃(这时候消除了一对括号) 6 重复2~5步,直到中缀表达式扫描完成 7 将s1中剩余的运算符依次弹出并压入s2中 8 依次弹出s2中的元素并输出,并将输出结果逆序,即得到后缀表达式 以中缀表达式1+((2+3)x4)-5举例 : (1)当扫描完1+((2+3后,s1和s2栈元素如下 (2)扫描到一个右括号’)’: (3)扫描到一个乘号和数字4: (4)扫描到一个右括号’)’: (5)扫描到一个减号和5: (6)将s1中剩余的运算符依次弹出并压入s2中 (7)依次弹出s2中的元素并输出,并将输出结果逆序,即得到后缀表达式 s2出栈:-

牛客NC21303删括号(判定性DP)

僤鯓⒐⒋嵵緔 提交于 2020-02-11 16:56:55
NC21303 删括号 题目链接: https://ac.nowcoder.com/acm/problem/21303 题目描述 给你一个 合法的 括号序列s1,每次你可以删除一个"()" 你可以删除0个或者多个"()" 求能否删成另一个括号序列s2 输入描述: 第一行输入一个字符串s (2 ≤ |s| ≤ 100) 第二行输入一个字符串t (2 ≤ |t| ≤ 100 ) 输出描述: 如果可以输出"Possible" 否则输出"Impossible" 示例1 输入 (()) () 输出 Possible 示例2 输入 () () 输出 Possible 示例3 输入 (()()()) ((())) 输出 Impossible 示例4 输入 ((())((())())()) (()(())()) 输出 Possible 示例5 输入 ((())((())())()) ((()()()()())) 输出 Impossible 判定性DP😲???没见过这种DP,所以也是现学的,看的题解才明白。 题目中的条件 合法的括号序列很重要 。 定义 d p [ i ] [ j ] [ k ] dp[i][j][k] d p [ i ] [ j ] [ k ] 为A前 i i i 个与B前 j j j 个被删去 k=删去左括号数-删去右括号数 的情况下是否可行。当 k==0 时删去的括号是成对的

正则表达式

…衆ロ難τιáo~ 提交于 2020-02-09 14:45:37
描述:正则表达式能够从一段文本中提取有用的信息。 0、使用正则表达式有如下步骤:   (1)寻找规律;   (2)使用正则符号表示规律   (3)提取信息 1、正则表达式的基本符号   1.1 点号“.”     一个点号可以代替除了换行符以外的任何一个字符,包括但不限于英文字母、数字、汉字、英文标点符号和中文标点符号。   1.2 星号“*”     一个星号可以表示它前面的一个子表达式(普通字符、另一个或几个正则表达式符号)0次到无限次。   1.3 问号“?”     问号表示它前面的子表达式0次或者1次。   1.4 反斜杠“\”     配合使用把特殊字符变成普通符号,把普通符号变成特殊字符。   1.5 转义字符表 转移字符 意义 \n 换行符 \t 制表符 \\ 普通反斜杠 \' 单引号 \" 双引号 \d 数字   1.6 小括号     小括号可以把括号里面的内容提取出来。 2、在python中使用正则表达式   2.1 python自带的正则表达式模块re(regular expression)     2.1.1 导入re      1 import re     2.1.2 findall       findall()方法,它能够以列表的形式返回所有满足要求的字符串       findall()的函数模型为:        1 re.findall

Leetcode 5016. 删除最外层的括号

两盒软妹~` 提交于 2020-02-08 09:21:31
5016. 删除最外层的括号 显示英文描述 我的提交 返回竞赛 用户通过次数 446 用户尝试次数 469 通过次数 456 提交次数 577 题目难度 Easy 有效括号字符串为空 ("") 、 "(" + A + ")" 或 A + B ,其中 A 和 B 都是有效的括号字符串, + 代表字符串的连接。例如, "" , "()" , "(())()" 和 "(()(()))" 都是有效的括号字符串。 如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。 给出一个非空有效字符串 S ,考虑将其进行原语化分解,使得: S = P_1 + P_2 + ... + P_k ,其中 P_i 是有效括号字符串原语。 对 S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S 。 示例 1: 输入:"(()())(())" 输出:"()()()" 解释: 输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())", 删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。 示例 2: 输入:"(()())(())(()(()))" 输出:"()()()()(())" 解释: 输入字符串为 "(()())(())(()(())

leetcode 1021. 删除最外层的括号(Remove Outermost Parentheses)

不想你离开。 提交于 2020-02-08 08:31:02
目录 题目描述: 示例 1: 示例 2: 示例 3: 解法: 题目描述: 有效括号字符串为空 ("") 、 "(" + A + ")" 或 A + B ,其中 A 和 B 都是有效的括号字符串, + 代表字符串的连接。例如, "" , "()" , "(())()" 和 "(()(()))" 都是有效的括号字符串。 如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为 原语(primitive) ,其中 A 和 B 都是非空有效括号字符串。 给出一个非空有效字符串 S ,考虑将其进行原语化分解,使得: S = P_1 + P_2 + ... + P_k ,其中 P_i 是有效括号字符串原语。 对 S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S 。 示例 1: 输入:"(()())(())" 输出:"()()()" 解释: 输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())", 删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。 示例 2: 输入:"(()())(())(()(()))" 输出:"()()()()(())" 解释: 输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",

[Leetcode] 32.最长有效括号

£可爱£侵袭症+ 提交于 2020-02-08 05:06:19
[Leetcode] 32.最长有效括号 关键词:DP,动态规划,动规。 最近在刷DP专栏的题目,这是其中一道题。 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 longest-valid-parentheses Sample1 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" Sample2 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 对于DP嘛,首先还是需要抽象出状态函数: dp[i] 表示:以 S[i] 结尾的,最长有效括号串的长度。 然后是状态转移方程: 如果 s.len == 0 or s.len == 1,那么返回 0 . 否则: if s[i]=='(' then dp[i]=0 if s[i]==')' then: if s[i-1]='(' then dp[i] = dp[i-2] + 2 (数组下标是否越界,即 i>=2? ) if s[i-1]=')' then: if s[i-dp[i-1]-1] == '(' then dp[i] = dp[i-dp[i-1]-2] + dp[i-1] + 2 (是否越界?) if s[i-dp[i-1]-1] == ')' then dp[i] = 0 第一个 if 语句表示:形如 ....( 这样的字符串,是必然不合法的。

【LeetCode 32】最长有效括号

我们两清 提交于 2020-02-08 04:23:27
题目链接 【题解】 设dp[i]表示以第i个字符结尾的最长有效括号的长度。 显然只要考虑s[i]==')'的情况 则如果s[i-1]=='(',则dp[i] = dp[i-2]+2; 如果s[i-1]==')',那么我们现在要在i前面去给s[i]==')'这个右括号去找左括号。 那么显然我们要先让s[i-1]这个右括号得到匹配。不然轮不到s[i]. 所以我们先往前走dp[i-1]长度. 然后看看i-1-dp[i-1]是不是左括号(这时才能轮得上s[i],这里面其实还要求dp[i]真的是 最长的 有效括号长度才行,不然不能直接这样判断) 是的话我们就得到一个长度为dp[i-1]+2的有效序列了。 当然别忘了前面还有dp[i-1-dp[i-1]-1]要加上去因为也可能是合法的匹配序列。 【代码】 class Solution { public: int longestValidParentheses(string s) { int dp[100000]; memset(dp,0,sizeof(dp)); int len = s.size(); int ans = 0; for (int i = 0;i < len;i++){ if (s[i]==')'){ if (i-1>=0){ if (s[i-1]=='('){ if (i-2<0) dp[i] = 2;else dp[i] =