一、题目介绍

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有效的括号的更多相关文章

  1. javascript匹配各种括号书写是否正确

    今天在codewars上做了一道题,如下 看上去就是验证三种括号各种嵌套是否正确书写,本来一头雾水,一种括号很容易判断, 但是三种怎么判断! 本人只是个前端菜鸟,,不会什么高深的正则之类的. 于是,在 ...

  2. 明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064

    看到“明显调用的表达式前的括号必须具有(指针)函数类型”这句时我才发现我的语文水平有多烂,怎么看都看不懂,折腾了半天才知道是哪里出了问题. 举个简单的例子 class CTest { void (CT ...

  3. [LeetCode] Remove Invalid Parentheses 移除非法括号

    Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...

  4. [LeetCode] Different Ways to Add Parentheses 添加括号的不同方式

    Given a string of numbers and operators, return all possible results from computing all the differen ...

  5. [LeetCode] Longest Valid Parentheses 最长有效括号

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  6. [LeetCode] Generate Parentheses 生成括号

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  7. [LeetCode] Valid Parentheses 验证括号

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  8. SQL 去掉某字段括号中的值

    今天在数据库匹配数据的时候,发现一些数据存在别名,导致我的数据匹配不上.在这里记录分享一下 例如: 李钟硕 (Lee Jong Suk),这里我匹配的是 “李钟硕” 示例1: SELECT rever ...

  9. JavaScript面试时候的坑洼沟洄——逗号、冒号与括号

    看完了javaScript数据类型和表达式与运算符相关知识后以为可以对JavaScript笔试题牛刀小试一把了,没想到有一次次的死在逗号,冒号和括号上,不得已再看看这几个符号吧. 逗号 逗号我们常见的 ...

随机推荐

  1. react之withRouter的作用

    withRouter的作用:把不是通过路由切换过来的组件,将react-router的history.location和match三个对象传入到props对象上: 默认情况下必须是经过路由匹配渲染的组 ...

  2. BootStrap基础入门概述总结

    是否还值得学习BootStrap 因为自己还是学生,自己在学习之前就先在网上看了看BootStrap是否在现在依旧流行,是否还值得学习. 以下是网友的一些评价: 20年11月 Bootstrap作为入 ...

  3. Nodejs path对象

    很快Node就会迎来4.0的时代,届时将并入现有的iojs,所以先前写过的iojs入门系列直接更名为NodeJS入门. 本篇开始将逐个介绍Node的各主要模块,依循API文档走一遍,但会给出比API文 ...

  4. 安卓手机超频CPU(无修饰CPU控制)

    手机软件内存越占越大,手机硬件配置太低运行太卡.其实可以通过超频cpu提升性能,安卓智能手机cpu怎么超频下面我来演示手机如何超频cpu.   方法/步骤     打开无修饰CPU控制.   设置CP ...

  5. 系统基础优化( 创建yum私有仓库最详细操作及解释 )

    目录 系统基础优化 一.Linux中安装软件的方式 安装方式 三种安装方式的区别 二.RPM安装☆ 1.安装及其他命令 2.手动下载软件包,可将其拖入shell中自动传入 1).手动网页下载软件包 2 ...

  6. 《PHP程序员面试笔试宝典》——签约和违约需要注意哪些事情?

    本文摘自<PHP程序员面试笔试宝典>. PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 经过了紧张激烈的笔试面试后,最后过五关斩六将,终于得到了用人单 ...

  7. Note -「Min_25 筛」“你就说这素因子你要不要吧?你要不要?”

      赛上想写,Track Lost 了属于是. \(\mathscr{Intro}\)   Min_25 筛是用于求积性函数前缀和,同时顺带求出一些"有意思"的信息的筛法.   一 ...

  8. Solution -「ABC 215H」Cabbage Master

    \(\mathcal{Description}\)   Link.   有 \(n\) 种颜色的,第 \(i\) 种有 \(a_i\) 个,任意两球互不相同.还有 \(m\) 个盒子,每个盒子可以被放 ...

  9. Solution -「洛谷 P3911」最小公倍数之和

    \(\mathcal{Description}\)   Link.   给定 \(\{a_n\}\),求: \[\sum_{i=1}^n\sum_{j=1}^n\operatorname{lcm}(a ...

  10. Spring Data JPA应用 之查询分析

    在Spring Data JPA应用之常规CRUD操作初体验 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)尾附上了JpaRepository接口继承关系及方法,可以知道JpaRepos ...