C++_Leecode20有效的括号
一、题目介绍
1.题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
2.题目提示
->1 <= s.length <= 104
->s仅由括号 '()[]{}' 组成
3.演示案例
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
二、题目分析
1.输入输出分析
字符串s---------->true/false
三、解法一:利用栈的结构进行解决
1.C++算法基础
1.1利用哈希表可以通过键找到值的特性来解决匹配问题,有点像数组,数组通过索引获得值,unordered_map通过键来获得对应的值。
->哈希表的创建与初始化
#include <unordered_map>
unordered_map<char,char> pairs;
pairs ={{'(',')'},{'[',']'},{'{','}'}};//注意这里最后一个键值对后面是没有逗号的,中间是全部用逗号隔开的不是分号也不是冒号,因为C++z中分号是用来间隔一个语句的。
->匹配
if (stk.top() != pairs[ch])
{return false;}
else {
...}
->C++中的true,false与TRUE,FALSE区别
false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define定义的
typedef int BOOL;
#define FALSE 0
#define TRUE 1
->unordered_map中的count()函数
该函数用于返回key出现的次数,由于unordered_map中的键只能出现一次,所以要么返回0,要么返回1。
1.2利用栈的数据结构解决括号的左括号的存储问题
->栈的创建和初始化
#include <stack>
stack<char> stk;
->和栈相关的函数
stk.empty() // 如果栈里的元素为空,返回1
stk.top() //用于获得栈顶的元素
stk.push() //往栈里添加新的元素
stk.pop() //出栈
stk.size() //返回该栈内的元素个数
1.3C++中查看数据的类型
#include <typeinfo>
string ="helloworld";
std::cout<<typeid(string).name()<<endl;
1.4C++11中对字符串的遍历
for(auto ch : str){
...}
2.我的题解
class Solution {
public:
bool isValid(string s) {
if (s.size() %2 ==1){
return false;
}
unordered_map<char,char> pairs = {
{')','('},
{']','['},
{'}','{'}
};
stack<char> stk;
for (char ch: s){
if (pairs.count(ch)){
if (stk.empty() || pairs[ch]!=stk.top()){
return false;
}
stk.pop();
}
else {
stk.push(ch);
}
}
return stk.empty();
}
};
3.易错
什么情况下,if()后面的else语句可以省略不写?
就是大括号{}里面代码的执行后,后面的代码也要执行,else可以省略,假如{}括号里面的执行了,大括号后面就不执行了,则需要else,所以不要盲目地省略else语句。
C++_Leecode20有效的括号的更多相关文章
- javascript匹配各种括号书写是否正确
今天在codewars上做了一道题,如下 看上去就是验证三种括号各种嵌套是否正确书写,本来一头雾水,一种括号很容易判断, 但是三种怎么判断! 本人只是个前端菜鸟,,不会什么高深的正则之类的. 于是,在 ...
- 明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064
看到“明显调用的表达式前的括号必须具有(指针)函数类型”这句时我才发现我的语文水平有多烂,怎么看都看不懂,折腾了半天才知道是哪里出了问题. 举个简单的例子 class CTest { void (CT ...
- [LeetCode] Remove Invalid Parentheses 移除非法括号
Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...
- [LeetCode] Different Ways to Add Parentheses 添加括号的不同方式
Given a string of numbers and operators, return all possible results from computing all the differen ...
- [LeetCode] Longest Valid Parentheses 最长有效括号
Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...
- [LeetCode] Generate Parentheses 生成括号
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
- [LeetCode] Valid Parentheses 验证括号
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- SQL 去掉某字段括号中的值
今天在数据库匹配数据的时候,发现一些数据存在别名,导致我的数据匹配不上.在这里记录分享一下 例如: 李钟硕 (Lee Jong Suk),这里我匹配的是 “李钟硕” 示例1: SELECT rever ...
- JavaScript面试时候的坑洼沟洄——逗号、冒号与括号
看完了javaScript数据类型和表达式与运算符相关知识后以为可以对JavaScript笔试题牛刀小试一把了,没想到有一次次的死在逗号,冒号和括号上,不得已再看看这几个符号吧. 逗号 逗号我们常见的 ...
随机推荐
- Java方法和数组
方法 什么是方法 Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则:方法的本意是功能块 ...
- Tomcat临时目录及java.io.tmpdir对应的目录
最近客户现场的技术支持接连反馈了一个问题:导入数据的时候,上传的excel会在服务器上生成一个临时文件,而这个临时文件都在 tomcat 的安装目录下,如果上传次数比较多的话,就会导致tomcat安 ...
- 虚拟机与Docker
https://www.cnblogs.com/kex1n/p/6933039.html https://blog.csdn.net/jingzhunbiancheng/article/details ...
- Info.plist常见的设置
建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 在旧版本Xcode创 ...
- Java GUI 简单台球游戏模型
完成效果: 1 package com.neuedu.test; 2 3 import java.awt.Frame; 4 import java.awt.Graphics; 5 import jav ...
- 关于unix下cp命令复制权限不够的问题
例如要将mysql-5.7.17-macos10.12-x86_64.tar.gz 拷贝到/usr/local目录下时,执行cp mysql-5.7.17-macos10.12-x86_64.tar. ...
- Windows查看本机SSH公钥,生成公钥
#Windows查看本机**SSH**公钥,生成公钥<br>--- ### 1.查看 ssh 公钥方法: 1. 打开你的 git bash 窗口 2. 进入 .ssh 目录:cd ~/.s ...
- INTERSPEECH 2014 | 1-Bit Stochastic Gradient Descent and its Application to Data-Parallel Distributed Training of Speech DNNs
这篇文章之前也读过,不过读的不太仔细,论文中的一些细节并没有注意到.最近为了写开题报告,又把这篇论文细读了一遍.据笔者了解,这篇论文应该是梯度量化领域的开山之作,首次使用了梯度量化技术来降低分布式神经 ...
- 图解python | 简介
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/56 本文地址:http://www.showmeai.tech/article-det ...
- mysql视图,索引
一.视图 View 视图是一个虚拟表,是sql语句的查询结果,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成.视图的数据变化会影响到基表,基表的数据变化也会 ...