LeetCode20——有效的括号
在记事本中写算法题和在纸上写其实感觉差不多,反正是不能进行调试。想起某高手的话,写代码要做到“人机合一”,写高级语言时(指的是 C 和 C++)脑海中要知道当前写的代码对应的反汇编代码,也就是要深入了解编译器对高级语言的处理。什么时候能达到这样的境界呢?
LeetCode 题库的第 20 题——有效的括号
我做题的习惯跟考试的习惯差不多,先找会做的,然后再慢慢啃不会的。本着一个原则,不用编译器,不去找答案,不会说明基础不牢固,继续补基础。
题目我截图过来。


上面的图是题目和给出的示例,示例是用来补充题目的,看着示例就知道什么时候应该返回 true ,什么时候返回 false 了。
解题思路
LeetCode 都会给出每个题的函数定义,比如这个题的定义如下:
bool isValid(char* s) {
}
我选择的是 C 语言来答题。
这个题中告诉我们:
1、正确的括号包括 括弧、方括号 和 花括号;
2、括号需要 成对 出现;
3、函数传递过来的是字符串。
那么,我的思路是:
1、获得字符串的长度,用来 申请一块 堆空间 和 遍历括号;
2、申请一块同样大小的 堆内存空间 做数组,用来模拟 堆栈 数据结构;
3、用一个变量来记录栈顶的位置,其实就是数组当前的下标;
4、然后遍历括号,如果是 ( [ { ,那么就进入 堆栈,并修改栈顶的位置;
5、如果是 ) ] } 那么就去和当前数组位置的前一个值进行比较,如果能够闭合,那么就让前一个出栈,并且修改栈顶的位置;
6、如果无法闭合,那么就返回假;
7、循环完成后,如果 堆栈 为空,说明括号都可以闭合,就返回 1,C 语言中 非0 为真;
8、如果 堆栈 不为空,说明有尚未闭合的括号,就返回0, C 语言中 0 为假。
解题答案
这个题就是 数据结构 中堆栈的应用,还是比较简单的。完整代码如下:
bool isValid(char* s) {
int len = strlen(s);
int i;
int pos = ;
char *pArr = (char*)malloc(len * sizeof(char));
for ( i = ; i < len; i ++ ) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
pArr[pos ++] = s[i];
}
if (s[i] == ')') {
if ( pArr[pos - ] != '(' ) {
return ;
} else {
pos--;
}
} else if (s[i] == '}') {
if ( pArr[pos - ] != '{' ) {
return ;
} else {
pos--;
}
} else if (s[i] == ']') {
if ( pArr[pos - ] != '[' ) {
return ;
} else {
pos--;
}
}
}
if ( pos != ) {
return ;
}
return ;
}
代码写的好不好就不管了,很多题都是 主调函数 释放空间,所以答题时,没有将 堆空间 释放掉,同样的 申请堆空间后,也没有判断内存是否申请成功。有很多地方写的不严谨,以后改正。
我的微信公众号:“码农UP2U”

LeetCode20——有效的括号的更多相关文章
- [Swift]LeetCode20. 有效的括号 | Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- leetcode20:有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...
- LeetCode20.有效的括号 JavaScript
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...
- <每日 1 OJ> -LeetCode20. 有效的括号
题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可 ...
- 面试之leetcode20堆栈-字符串括号匹配,队列实现栈
1 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可被认 ...
- leetcode.字符串.696计数二进制子串-java
1. 具体题目 给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的.重复出现的子串要计算它们出现的次数. 示例 1 : 输入: ...
- LeetCode通关:栈和队列六连,匹配问题有绝招
刷题路线参考: https://github.com/chefyuan/algorithm-base https://github.com/youngyangyang04/leetcode-maste ...
- 十 用栈解决LeetCode20题括号的匹配
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiIAAACWCAYAAADjcONgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjw
- LeetCode 20. 有效的括号(Valid Parentheses)
20. 有效的括号 20. Valid Parentheses 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须 ...
随机推荐
- 有了faker,再也不用为了构造测试数据而烦恼啦!
在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,要么需要手动制造一些数据.在手动制造数据的过程中,可能需要花费大量精力和工作量,此时可以借助Py ...
- 数据防泄漏 | 禁止PrintScreen键
在数据防泄漏软件,通常会禁止 PrintScreen 键,防止通过截屏来将数据保存为图片而导致泄密. 这类软件如果想要实现是比较简单的,但是想要将功能做的强大些,还是需要下功夫的.以前使用过一款数据防 ...
- keras RAdam优化器使用教程, keras加载模型包含自定义优化器报错 如何解决?
本文首发于个人博客https://kezunlin.me/post/c691f02b/,欢迎阅读最新内容! python keras RAdam tutorial and load custom op ...
- solidity智能合约implicit conversion异常
问题场景 在使用^0.5.10版本的solidity时,如果使用this关键字会出现以下问题. 代码: require(tokenContract.balanceOf(this) >= _num ...
- 《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》研读笔记
<DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks>研读笔记 论文标题:DSLR-Quality ...
- Java生鲜电商平台-商品分类表和商品类型表的区别与数据库设计
Java生鲜电商平台-商品分类表和商品类型表的区别与数据库设计 二者服务的对象不一样 目的也是不一样的 商品分类是为商品服务的 用来管理商品 商品类型是为扩展属性服务的 用来管理属性 举例:[转] ...
- 科技风商务项目管理PPT模板
模板来源:http://ppt.dede58.com/peixunyanjiang/26267.html
- crm-全总结
1.什么是crm 客户关系管理系统 ,以客户数据为中心建立一个信息收集.管理.分析和利用的信息系统 2.业务逻辑相关使用crm-app完成 1)路由项目分发到crm-app (别名 传参 命名空间) ...
- 浅谈Vue下的components模板
浅谈Vue下的components模板在我们越来越深入Vue时,我们会发现我们对HTML代码的工程量会越来越少,今天我们来谈谈Vue下的 components模板的 初步使用方法与 应用 我们先来简单 ...
- 邮Z速递物流,让用户密码在网络中遨游
" 最近分析快递行业的APP上瘾了,求解救." 邮政作为快递行业一个傻大黑的存在,一直很奇怪,我一直在纳闷,邮政和EMS到底是不是一家,在很多网点,它们是一体的存在,但很多东西,又 ...