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笔试题牛刀小试一把了,没想到有一次次的死在逗号,冒号和括号上,不得已再看看这几个符号吧. 逗号 逗号我们常见的 ...
随机推荐
- 深入理解F1-score
本博客的截图均来自zeya的post:Essential Things You Need to Know About F1-Score | by Zeya | Towards Data Science ...
- 阿里P8整理Mysql面试题答案,助你“脱颖而出”,吊打面试官!(建议收藏)
前言 作为一名开发人员,每天英高都在和数据库进行着斗智斗勇,尤其是互联网行业,对MySQL的使用是比较多的.同样的,因为mysql的重要性以及普及性,在面试的时候一定是一个面试的重点或者说常问问题,说 ...
- JDBC 操作预编译语句中LIKE模糊匹配怎么用
问题描述 在使用JDBC 预编译执行语句时,遇到一个问题,那就是在含有LIKE的查询语句时,我到底怎么使用匹配符%._呢. 如: SELECT * FROM "+LQ_USERS+" ...
- java命令- (学习)jps
jps(Java Virtual Machine Process Status Tool) 是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前jav ...
- git每次操作都要输入账号密码 解决方案
1.执行命令: git config --global credential.helper store git pull 2.输入用户名密码,以后就不会再次要求用户名密码了
- homestead 入坑安装
1.在使用 Homestead 之前,需要先安装 Virtual Box.VMWare.Parallels 或 Hyper-V (四选一,我们通常选择 VirtualBox,因为只有它是免费的)以及 ...
- Keepalived配置与使用(1)
介绍 Keepalived是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障.一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为 ...
- C++实现对Json数据的友好处理
背景 C/C++客户端需要接收和发送JSON格式的数据到后端以实现通讯和数据交互.C++没有现成的处理JSON格式数据的接口,直接引用第三方库还是避免不了拆解拼接.考虑到此项目将会有大量JSON数据需 ...
- docker基础——2.镜像管理
1. Docker镜像的主要特点 (1) 采用分层构建机制. 最底层为bootfs,用于系统引导的文件系统,包括bootloader和kernel,容器启动后会被卸载以节约资源. 其上为rootfs, ...
- 【故障公告】k8s 开船记:增加控制舱(control-plane)造成的翻船
春节期间我们更换了 kubernetes 生产集群,旧集群的 kubernetes 版本是 1.17.0,新集群版本是 1.23.3,新集群上部署了 dapr,最近准备将更多独立部署的服务器部署到 k ...