一、题目介绍

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. web.xml 配置文件?

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  2. GDB死锁调试

    1.测试代码 代码中开启两个线程,加锁后轮流输出数据,其中一个线程误将pthread_mutex_unlock(),写成pthread_mutex_lock()代码如下: int g_tickets ...

  3. 利用 Python 进行数据分析(Python 数据分析)· 第 2 版

    译者:SeanCheney 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 机器学习交流群 629470233 ApacheCN 学习资源 Sklearn 与 ...

  4. halcon视觉入门钢珠识别

    halcon视觉入门钢珠识别 经过入门篇,我们有了基础的视觉识别知识.现在加以应用. 有如下图片: 我们需要识别图片中比较明亮的中间区域,有黑色的钢珠,我们需要知道他的位置和面积. 分析如何识别 编写 ...

  5. 通过安装HomeBrew来安装Python3

    首先说什么是HomeBrew? 下面引用简书上一个博客的解释:(博客链接:http://www.jianshu.com/p/d229ac7fe77d) 为什么要使用Homebrew Mac OS X是 ...

  6. python数据分析入门笔记[1]

    1.Numpy: Numpy是python科学计算的基础包,它提供以下功能(不限于此): (1)快速高效的多维数组对象naarray (2)用于对数组执行元素级计算以及直接对数组执行数学运算的函数 ( ...

  7. Note -「最大团-最小度不等式」

      这是什么奇怪的名字qwq. 一些定义   只为便于理解,没有苛求专业的定义. 简单无向图:不存在重边.自环的无向图. \(\delta(G)\):无向图 \(G\) 中结点的最小度数.即 \(\m ...

  8. JAVA 1.对象和封装

    1. 2. 3.Java类里面属性可以付初使值 4.属性的名字一小写开头 5 6.构造方法 1.语法:       7.staitc的应用  1.statia可以用来修饰:方法,属性,代码块 , st ...

  9. suse 12 二进制部署 Kubernetets 1.19.7 - 第06章 - 部署kube-apiserver组件

    文章目录 1.6.部署kube-apiserver 1.6.0.创建kubernetes证书和私钥 1.6.1.生成kubernetes证书和私钥 1.6.2.创建metrics-server证书和私 ...

  10. 【性能测试实战】jmeter + k8s + 微服务 + skywalking + efk,测试都在学的热门技术

    原文持续更新完善:https://www.cnblogs.com/uncleyong/p/15475614.html 前言:当前的热门主流技术是哪些?测开为啥那么火?90%以上的测试对测开认识不准确 ...