括号

LeetCode(32):最长有效括号

拟墨画扇 提交于 2020-02-08 03:42:56
Hard! 题目描述: 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 解题思路: 这道求最长有效括号比之前那道 Valid Parentheses 验证括号 难度要大一些,这里我们还是借助栈来求解,需要定义个start变量来记录合法括号串的起始位置,我们遍历字符串,如果遇到左括号,则将当前下标压入栈,如果遇到右括号,且当前栈为空,则将下一个坐标位置记录到start,如果栈不为空,则将栈顶元素取出,此时若栈为空,则更新结果和i - start + 1中的较大值,否则更新结果和i - 栈顶元素中的较大值,代码如下: C++解法: 1 class Solution { 2 public: 3 int longestValidParentheses(string s) { 4 int res = 0, start = 0;//start变量用来记录合法括号串的起始位置 5 stack<int> m; 6 for (int i = 0; i < s.size(); ++i) { 7 if (s[i] == '(') m.push(i); 8 else if (s[i] == ')')

原子的数量

依然范特西╮ 提交于 2020-02-07 22:01:00
给定一个化学式formula(作为字符串),返回每种原子的数量。 原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字。 如果数量大于 1,原子后会跟着数字表示原子的数量。如果数量等于 1 则不会跟数字。例如,H2O 和 H2O2 是可行的,但 H1O2 这个表达是不可行的。 两个化学式连在一起是新的化学式。例如 H2O2He3Mg4 也是化学式。 一个括号中的化学式和数字(可选择性添加)也是化学式。例如 (H2O2) 和 (H2O2)3 是化学式。 给定一个化学式,输出所有原子的数量。格式为:第一个(按字典序)原子的名子,跟着它的数量(如果数量大于 1),然后是第二个原子的名字(按字典序),跟着它的数量(如果数量大于 1),以此类推。 示例 1: 输入: formula = "H2O" 输出: "H2O" 解释: 原子的数量是 {'H': 2, 'O': 1}。 示例 2: 输入: formula = "Mg(OH)2" 输出: "H2MgO2" 解释: 原子的数量是 {'H': 2, 'Mg': 1, 'O': 2}。 示例 3: 输入: formula = "K4(ON(SO3)2)2" 输出: "K4N2O14S4" 解释: 原子的数量是 {'K': 4, 'N': 2, 'O': 14, 'S': 4}。 注意: 所有原子的第一个字母为大写

正则表达式

此生再无相见时 提交于 2020-02-07 08:34:15
正则表达式(regular expression) 1.字符 字符 含义 普通字符 占大多数,代表自身 元字符 例如.*等等,代表特殊的含义,要代表自身时要用\转义 2.分隔符 以下分隔符用//表示无具体意义 3.简单字符串 简单字符串 正则表达式 匹配字符串 示例 /ring/ ring ring,spring /or not/ or not or not,poor nothing 4.句点/./ 代表任意一个字符 re 匹配字符串 示例 /.alk/ 任意一个字符后加上alk talk,will talk 5.星号/*/ 星号跟在某个字符(串)(作用于字符串的话要用小括号括起来)后面则,代表该字符(串)可以出现零次或多次. re 匹配字符串 示例 /([^)(]*)/ 括号里面不包含括号的字符串 (this) 6.?与+ 默认搜索模式为贪婪模式,即最大长度匹配. 7.括号/()/ 表示一个子正则表达式,一般用于限制特殊字符的作用范围(也就是说不表示作用范围时,他就是小括号本身), re 匹配字符串 示例 /(12)*/ 出现一次或者零次的12 12,1212 8.方括号/[]/ 代表一个字符类,与方括号内条件匹配的单个字符即视为方括号的整体内容. 1.如果方括号内第一个字符为脱字符^则表示不时方括号里面的字符 2.可以用连字符-确定范围 3.方括号内的元字符失去特殊意义

正则表达式

余生长醉 提交于 2020-02-07 08:32:55
正则表达式(regular expression) 1.字符 字符 含义 普通字符 占大多数,代表自身 元字符 例如.*等等,代表特殊的含义,要代表自身时要用\转义 2.分隔符 以下分隔符用//表示无具体意义 3.简单字符串 简单字符串 正则表达式 匹配字符串 示例 /ring/ ring ring,spring /or not/ or not or not,poor nothing 4.句点/./ 代表任意一个字符 re 匹配字符串 示例 /.alk/ 任意一个字符后加上alk talk,will talk 5.星号/*/ 星号跟在某个字符(串)(作用于字符串的话要用小括号括起来)后面则,代表该字符(串)可以出现零次或多次. re 匹配字符串 示例 /([^)(]*)/ 括号里面不包含括号的字符串 (this) 6.?与+ 默认搜索模式为贪婪模式,即最大长度匹配. 7.括号/()/ 表示一个子正则表达式,一般用于限制特殊字符的作用范围(也就是说不表示作用范围时,他就是小括号本身), re 匹配字符串 示例 /(12)*/ 出现一次或者零次的12 12,1212 8.方括号/[]/ 代表一个字符类,与方括号内条件匹配的单个字符即视为方括号的整体内容. 1.如果方括号内第一个字符为脱字符^则表示不时方括号里面的字符 2.可以用连字符-确定范围 3.方括号内的元字符失去特殊意义

20.有效的括号

◇◆丶佛笑我妖孽 提交于 2020-02-06 02:04:21
题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5: 输入: "{[]}" 输出: true 代码: class Solution { public: bool isValid(string s) { if(s.length() % 2!=0) return false; map<char,char>bracket; bracket.insert(pair<char,char>('}','{')); //注意map得插入方式 bracket.insert(pair<char,char>(')','(')); bracket.insert(pair<char,char>(']','[')); stack<char>mystack; for(int i=0;i<s.length();i++){ if(s[i]=='{'||s[i]=='['||s[i]=='(') mystack.push(s[i

(6.3)动态规划之动态规划例子-矩阵相乘

拥有回忆 提交于 2020-02-05 23:16:45
文章目录 1.问题提出 2.关键计算问题 3.完全加括号的矩阵连乘积 4.矩阵连乘问题 1.问题提出 软件行业中客户总是在变更需求 银行对我们公司开发的乘法模块还不满意。他们的真实想法并不是实现两个矩阵的乘法,而是是能一次够实现多个矩阵按照算法运算法则的乘法,因此要求我们进一步改进我们的系统,实现多个矩阵的连乘功能,并且需要看到我们设计的程序能够满足他们的运行效率要求时才付二期款。 2.关键计算问题 给定n个矩阵{ A 1 A_1 A 1 ​ , A 2 A_2 A 2 ​ ,。。。 A n A_n A n ​ }, 其中 A i A_i A i ​ 与 A i + 1 Ai+1 A i + 1 是可乘的,i=1,2,…n-1。 考察这n个矩阵的连乘积 A 1 A_1 A 1 ​ A 2 A_2 A 2 ​ … A n A_n A n ​ 由于矩阵乘法满足结合律,所以计算矩阵的连乘可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定 若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则可以依此次序反复调用2个矩阵相乘的标准算法计算出矩阵连乘积 3.完全加括号的矩阵连乘积 设有四个矩阵 A,B,C,D, 它们的维数分别是: A=50 10 ,B =10 40 ,C = 40 30 D = 30 5 总共有五中完全加括号的方式,及相应的乘法次数如下 (A(

计算机以及Java语言的概述

社会主义新天地 提交于 2020-02-05 21:09:38
1.计算机的概述 计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。 由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。 2.计算机的组成 ①中央处理器(CPU 简称CPU。通常由两部分组成:控制单元和算术/逻辑单元。赫兹是衡量CPU速度的单位。 ②内存 计算机的内存由一个有序的字节序列组成,用于存储程序及程序需要的数据。 每个字节都有唯一的地址,使用这个地址确定字节的位置,以便于存储和获取数据。因为可以按任意顺序存取字节,所以内存也称随机访问存储器(RAM)。 RAM是一种易失的数据保存形式。 硬盘用于永久的存储数据和程序。 ③存储设备(磁盘和光盘) 是为了长久的存放程序和数据。 存储设备主要由四种类型:磁盘驱动器、光盘驱动器、磁带驱动器、USB闪存驱动器。 ④输入设备(鼠标和键盘) 1.键盘,功能键、修饰符键、数字小键盘、方向键、插入键、删除键、向上翻页键和向下翻页键。 2.鼠标 3.显示器,屏幕分辨率和点距决定显示的质量。 ⑤输出设备(显示器和打印机) 显示器,屏幕分辨率和点距决定显示的质量。 ⑥通信设备(网卡) 拨号调制解调器、DSL、电缆调制解调器、网络接口卡以及无线通讯设备。 这些组件通过一个称为总线的子系统连接。 3.操作系统 操作系统是管理计算机硬件与软件资源的计算机程序

算术表达式-前缀式-后缀式

China☆狼群 提交于 2020-02-05 02:08:52
今天学习到了栈的一道题:数据结构实验之栈与队列二:一般算术表达式转换成后缀式 所以要了解前缀式和后缀式及其的转换。 表达式的转换,前缀式(波兰式)后缀式(逆波兰式)和和我们正常的表达式(中缀表达式) a+b 相比较,+ab 或 ab+ 是一种不同的方式。 例如: a×b+(c-d/e)×f 中缀表达式: 我们把它转前缀或者后缀,以前缀式为例(把一个整体看成两个表达式的一个运算,把运算符放到两个表达式的前面),后缀式是相似的原理,把运算符放到两个表达式的后面。 首先举个例子; 中缀式转后缀式:a×b+(c-d/e) ×f 优先级是 括号 乘除 加减 首先优先括号;括号里优先除法,然后减法。 所以为(除法): a×b+(c-de/)×f 然后(加法):a×b+(cde/-)×f 括号运算完 然后 括号外 优先乘法 然后 加法 所以 (1)ab×+cde/-f× (2) ab×cde/-f×+ 这里只是介绍,简单的理论。 具体代码实现还没有想好。 __________________________________________________________________________________________ 下划线 ———————— 看到大佬方法。https://blog.csdn.net/qq_34392662/article/details/82055239

括号匹配问题

不羁岁月 提交于 2020-02-04 22:13:12
括号匹配问题 堆栈存入数组下标间接实现数组元素的操作 不使用堆栈 # include <iostream> # include <string> using namespace std ; bool find ( string & s , int index ) { while ( index > 0 ) { index -- ; if ( s [ index ] == '(' ) { s [ index ] = 'a' ; return true ; } } return false ; } int main ( ) { string data ; while ( cin >> data ) { cout << data << endl ; for ( int i = 0 ; i < data . length ( ) ; i ++ ) { if ( data [ i ] == ')' ) { if ( find ( data , i ) ) { data [ i ] = 'a' ; } } } for ( int i = 0 ; i < data . length ( ) ; i ++ ) { if ( data [ i ] == '(' ) { cout << "$" ; } else if ( data [ i ] == ')' ) { cout << "?" ; }

力扣20有效的括号题解

邮差的信 提交于 2020-02-04 20:22:45
1.题目 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 1.左括号必须用相同类型的右括号闭合。 2.左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/valid-parentheses 2.想法 先创建一个动态数组作为栈,java中用ArrayList,将所给字符串转化为字符数组,循环遍历该数组,将左括号类型的放入动态数组,若遇到右括号则将对应的左括号从动态数组中删除,最终若动态数组的元素为空则为有效括号返回true,反之亦然。 3.图解 来源:力扣(LeetCode)官方题解 4.注意点 (1)有可能出现单右括号的例子 5.自己题解 class Solution { public boolean isValid ( String s ) { char [ ] a = s . toCharArray ( ) ; ArrayList b = new ArrayList ( ) ; for ( int i = 0 ; i < a . length ; i ++ ) { if ( a [ i ] == '(' || a [ i ] == '[' || a [ i ] == '{' ) { b .