背景

本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了 三个简单、两个中等、一个困难 等级的题目,共计三十道题,利用三十天的时间完成这组刻意练习。

本次任务的知识点:字符串

字符串或串(string) 是由数字、字母、下划线组成的一串字符。一般记为 s = “a1a2...an”(n >= 0)。它是编程语言中表示文本的数据类型。

通常以串的整体作为操作对象,如:在串中查找某个子串在该串中首次出现的位置、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。串通常以顺序的方式进行存储与实现。


题目

  • 题号:20
  • 难度:简单
  • 网址:https://leetcode-cn.com/problems/valid-parentheses/

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true

示例 6:

输入: ""
输出: true

示例 7:

输入: "(("
输出: false

实现

方式一:利用栈

思路:首先判断该字符串长度的奇偶性,如果是奇数,则返回false。否则,利用栈先进后出的特点,遇到“{”,“[”,“(”进行入栈操作,遇到“}”,“]”,“)”就与栈顶元素进行比较,如果是对应括号则出栈,否则返回false。

  • 执行结果:通过
  • 执行用时:88 ms, 在所有 C# 提交中击败了 70.31% 的用户
  • 内存消耗:22 MB, 在所有 C# 提交中击败了 17.91% 的用户
public class Solution {public bool IsValid(string s) {if (string.IsNullOrEmpty(s))return true;int count = s.Length;if(count%2 == 1)return false;Stack<char> stack = new Stack<char>();for (int i = 0; i < count; i++){char c = s[i];if (stack.Count == 0){stack.Push(c);}else if(c == '[' || c == '{' || c == '('){stack.Push(c);}else if (stack.Peek() == GetPair(c)){stack.Pop();}else{return false;}}return stack.Count == 0;        }public static char GetPair(char c){if (c == ')')return '(';if (c == '}')return '{';if (c == ']')return '[';return '\0';}
}

Python 语言

  • 执行结果:通过
  • 执行用时:40 ms, 在所有 Python3 提交中击败了 47.30% 的用户
  • 内存消耗:13.5 MB, 在所有 Python3 提交中击败了 5.16% 的用户
class Solution:def isValid(self, s: str) -> bool:dic = {")": "(", "}": "{", "]": "["}if s is None:return Truecount = len(s)if count % 2 == 1:return Falselst = list()for i in range(count):c = s[i]if len(lst) == 0:lst.append(c)elif c == "[" or c == "{" or c == "(":lst.append(c)elif lst[-1] == dic[c]:lst.pop()else:return Falsereturn len(lst) == 0

往期活动

LSGO软件技术团队会定期开展提升编程技能的刻意练习活动,希望大家能够参与进来一起刻意练习,一起学习进步!

  • Python基础刻意练习活动即将开启,你参加吗?
  • Task01:变量、运算符与数据类型
  • Task02:条件与循环
  • Task03:列表与元组
  • Task04:字符串与序列
  • Task05:函数与Lambda表达式
  • Task06:字典与集合
  • Task07:文件与文件系统
  • Task08:异常处理
  • Task09:else 与 with 语句
  • Task10:类与对象
  • Task11:魔法方法
  • Task12:模块

我是 终身学习者“老马”,一个长期践行“结伴式学习”理念的 中年大叔

我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。

愿我们一起学习,一起进步,相互陪伴,共同成长。

后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码:

刻意练习:LeetCode实战 -- Task15. 有效的括号相关推荐

  1. LeetCode实战:有效的括号

    题目英文 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the ...

  2. LeetCode实战:排序链表

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Sort a link ...

  3. LeetCode实战:除自身以外数组的乘积

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given an ar ...

  4. LeetCode实战:二叉树的最近公共祖先

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...

  5. LeetCode实战:二叉搜索树中第K小的元素

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...

  6. LeetCode实战:LRU缓存机制

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Design and ...

  7. LeetCode实战:二叉搜索树的最近公共祖先

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...

  8. LeetCode实战:删除链表中的节点

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Write a fun ...

  9. LeetCode实战:反转链表

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Reverse a s ...

最新文章

  1. 计算机上机报告-origin,Origin 8上机练习1
  2. C#判断文件及文件夹是否存在并创建
  3. 服务器系统健康值计算算法,身体健康指数计算方法
  4. ubuntu11.04解决root不能登录的问题
  5. http://blog.csdn.net/u011026037/article/list/2
  6. rac 火星舱如何备份oracle_Oracle数据库(RAC)巡检报告
  7. 漫画算法:判断2的乘方
  8. 计算机机房安全风险防控规范,中心机房安全风险分析一览表
  9. PyQt5系列(二)Mac下使用py2app打包python项目
  10. Ubuntu下升级安装gcc-7.5.0教程
  11. win7 mysql 管理员权限_win7 管理员权限
  12. IFD-x 微型红外成像仪探测距离说明
  13. Ubuntu下GloVe中文词向量模型训练
  14. python 安装TFLearn模块
  15. Taro3.2 适配 React Native 之运行时架构详解
  16. PHP如何解决swoole守护进程Redis假死 ,mysql断线重连问题?
  17. 机器人技术(2)Ubuntu linux系统简介及安装
  18. IDEA设置Working directory及作用
  19. 开源投资回报率高达4倍!欧盟委员会全力推动开源软件发展
  20. BMP文件格式详解(BMP file format)

热门文章

  1. mysql 5.6 binlog_format_ROW 格式binlog 在MySQL5.6上的数据恢复实验
  2. 1057 Stack
  3. 1024 Palindromic Number
  4. (C++)1002 写出这个数
  5. Python培训分享:python爬虫可以用来做什么?
  6. 学javascript有哪些开发工具
  7. 学python培训到底能干嘛
  8. mobile还有人用吗 spring_话说,苹果手机语音备忘录功能还有人用吗?
  9. 【冷门实用小工具】JAVA和C#轻量级的UML图绘制工具NClass,UML类图编辑器免安装版【亲测有效】
  10. 30秒或更短的时间内弄懂的有用CSS代码片段