c语言 malloc前的括号,20. 有效的括号(LeetCode)——C语言及JS实现
问题描述:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
思路:
遍历字符串,将左括号入栈,遇到右括号就将栈顶元素出栈,比较栈顶元素与相应的右括号对应的左括号是否相同,相同则将栈顶元素出栈,然后继续循环,当stack为空时,也直接返回false。不相同则表示不匹配,返回false。
将右括号作为hash表的键,相应的左括号作为值,存储在map中。
一、JS解法/**
* @param {string} s
* @return {boolean}
*/
const isValid = function (s) {
// 如果为奇数,则肯定不满足条件
if (s.length % 2 !== 0) {
return false
}
// 初始化一个map
const map = new Map([
[')', '('],
['}', '{'],
[']', '[']
])
const stack = []
const len = s.length
for (let i = 0; i < len; i++) {
// 如果字符在map中存在,即作为map的键存在,则说明遍历到的是右括号
// 此时,需要判断其前一个元素(即栈顶的元素)是否是对应的左括号
// 是则将栈顶元素出栈,否则则返回false,即不匹配
if (map.has(s[i])) {
// 栈为空或者栈顶元素与右括号对应的左括号不同则表示不匹配
if (!stack.length || stack[stack.length - 1] !== map.get(s[i])) {
return false
} else {
// 当前元素匹配,则进行下一次循环
stack.pop()
}
} else {
// 如果字符不在map中存在,这说明是左括号,将其入栈即可
stack.push(s[i])
}
}
return !stack.length
}
console.log(isValid("){"))官方给的解答中使用的是数组的forEach()方法,此方法return不能直接跳出循环,continue和break也不起作用,因此官方解答提交无法通过。此处直接使用for循环遍历字符串即可。
二、C语言解法bool isValid(char * s){
int len = strlen(s);
if (len % 2 != 0) {
return false;
}
char *stack = (char *)malloc((len + 1) * sizeof(char));
memset(stack, 0, len+1);
for (int i = 0; i < len; i++) {
if (s[i] == ')' || s[i] == ']' || s[i] == '}') {
if (!strlen(stack) || stack[strlen(stack) - 1] + 1 != s[i] && stack[strlen(stack) - 1] + 2 != s[i]) {
return false;
} else {
stack[strlen(stack) - 1] = 0;
}
} else {
stack[strlen(stack)] = s[i];
}
}
return !strlen(stack);
}
思路一样,不过C中没有map,因此用ASCII值做了一些判断。右括号ASCII值比左括号大1或者2。
c语言 malloc前的括号,20. 有效的括号(LeetCode)——C语言及JS实现相关推荐
- 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)
代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...
- 20. 有效的括号-C语言
题目来源:力扣 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正 ...
- LeetCode19删除链表的倒数第N个节点20有效的括号
维护不易,还请点赞支持,微信搜索bigsai 回复进群一起打卡. 19删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1-> ...
- C语言malloc,free的用法
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105163414 C ...
- LeetCode 20. 有效的括号 golang(三)
20. 有效的括号 这个题做了三次,前两次的解法现在觉得是算不得正确的. 看的多写得少 做的多总结少 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有 ...
- C语言佛,佛大c语言毕业前补考.doc
佛大c语言毕业前补考 46题18分,47题10分,48题12分.49-53填空题3分,红色字答案.其他1分.答案基本都是正确的,祝好运! 1.表示关系x<=y<=z的c语言表达式为( C ...
- 算法训练第十一天|力扣20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
20. 有效的括号 题目链接:有效的括号 参考:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B ...
- 算法训练Day11 | LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)
目录 LeetCode232.用栈实现队列 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode225. 用队列实现栈 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 ...
- c语言switch逻辑用语,C语言习题(前五章)参考答案.doc
C语言习题(前五章)参考答案.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...
最新文章
- 卷积神经网络CNN与深度学习常用框架的介绍与使用
- 一天搞定HTML----列表标签03
- [转].Net实现本地化简易教程
- IOS之学习笔记四(类的实现和对象和id)
- 4-1 AlexNet神经网络
- phpcmsV9 QQ登录问题分析 - 踩坑篇
- 天才?骗子?解析Deep Tech
- 冒泡排序和选择排序的实现与比较
- 页面自适应纯CSS,使用rem单位
- linux 安装adobe字体,Adobe Creative Cloud应用程序已更新,为iOS 13和iPadOS提供免费的自定义字体...
- iPhone12 系列机型详细配置对比,iPhone 12mini\12\12Pro\12ProMax
- 用.NET做动态域名解析
- 寒门再难出贵子(好好看一下,有很大收货的)
- android 优化侧滑按钮,Android 界面侧滑
- 微信收钱的盒子服务器老是断开,微信文件已过期或被清理的终极解决办法
- 贴片铝电容识别及型号_TDK贴片电容识别方法及命名规则
- 类似婚礼纪的Java项目_「婚礼纪」婚礼纪 java面试 - seo实验室
- 10周成为数据分析师!
- 敬业福!2023官方集福攻略
- 腾讯第一批开发工程师徐钢武回忆道【曾几何时我真的认为代码是这样的】
热门文章
- linux 运行库 编译参数,Linux/CentOS 升级C基本运行库CLIBC的注意事项(当想解决GLIBC_2.x找不到的编译问题)...
- Redis和MySQL的结合方案
- 三.Python函数
- 阿里巴巴在ITU-T成功立项数据安全相关标准
- SpringBoot加载静态资源
- 数值保留小数点两位,但同时去除小数点后多余0 的 javascript、java实现
- 网站防盗链的配置之apache
- 1503171912-ny-一道水题
- ASP.NET MVC 5– 使用Wijmo MVC 5模板1分钟创建应用
- Pixazza把每张图片自动变成广告赚钱