js有效括号匹配
// 定义一个括号映射
const bracketMap = [
{
left: '[',
right: ']'
},
{
left: '<',
right: '>'
},
{
left: '(',
right: ')'
},
{
left: '【',
right: '】'
},
{
left: '(',
right: ')'
},
{
left: '《',
right: '》'
},
{
left: '{',
right: '}'
}
]
function match(params) {
const stack = [];
const leftMap = bracketMap.map(item => item.left);
const rightMap = bracketMap.map(item => item.right);
// 将字符串形式的括号集合转为数组
const arr = params.split('');
// 循环每一个括号,并做判断
for (const key in arr) {
// 左括号入栈
if (leftMap.includes(arr[key])) {
stack.push(arr[key]);
}
// 右括号 && 右括号在映射中的下标等于栈顶括号(栈顶括号:是左括号,因为只有左括号执行了进入栈操作)在映射中的下标,说明括号匹配,那么执行出栈操作
else if (rightMap.includes(arr[key]) && (bracketMap.findIndex(item => item.right === arr[key]) === bracketMap.findIndex(item => item.left === stack[stack.length - 1]))) {
stack.pop(arr[key]);
}
// 在循环中未结束,栈为空,匹配失败
else (!stack.length) {
return 'ERROR';
}
}
// 最后判断,栈为空,则表示匹配成功;反之,则匹配失败
return stack.length ? 'ERROR' : 'SUCCESS';
}
// 测试case:
const str = '[<(《》【】(([【[[]]《》】()])))>]'; // true
// const str = '(){}[]'; // true
// const str = '([{}])'; // true
// const str = '(}'; // false
// const str = '[(])'; // false
// const str = '[({})](]'; // false
console.log(match(str));
js有效括号匹配的更多相关文章
- HDU4632 Poj2955 括号匹配 整数划分 P1880 [NOI1995]石子合并 区间DP总结
题意:给定一个字符串 输出回文子序列的个数 一个字符也算一个回文 很明显的区间dp 就是要往区间小的压缩! #include<bits/stdc++.h> using namesp ...
- 括号匹配 区间DP (经典)
描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来 ...
- YTU 3003: 括号匹配(栈和队列)
3003: 括号匹配(栈和队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...
- [原]NYOJ 括号匹配系列2,5
本文出自:http://blog.csdn.net/svitter 括号匹配一:http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号匹配二:htt ...
- POJ C程序设计进阶 编程题#4:括号匹配问题
编程题#4:扩号匹配问题 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在某 ...
- 南阳理工ACM 括号匹配问题,并求出使得括号能够匹配需要新增的最小括号数(括号匹配(二))
描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起 ...
- 【栈思想、DP】NYOJ-15 括号匹配(二)
括号匹配(二) 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能 ...
- NYOJ 题目15 括号匹配(二)(区间DP)
点我看题目 题意 : 中文题不详述. 思路 : 本来以为只是个小模拟,没想到是个区间DP,还是对DP不了解. DP[i][j]代表着从字符串 i 位置到 j 位置需要的最小括号匹配. 所以初始化的DP ...
- C语言数据结构之栈:括号匹配
括号匹配这是个很简单的题目,如果只有小括号,就模拟进栈和出栈的过程就行了: 注:输入时'@'作为结束标志 #include <stdio.h> int main() { freopen(& ...
- [NYOJ 15] 括号匹配(二)
括号匹配(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:6 描述 给你一个字符串,里面只包含"(",")","[&qu ...
随机推荐
- 国产AI训练卡,对标美国NVIDIA公司的A100,华为昇腾Atlas 300T A2(Ascend 910B4)高性能GPU/NPU/AI推理/国产计算/信创训练卡 —— 电商平台已开售
China has successfully achieved the localization of AI chips, breaking through the technological res ...
- 【转载】 Ring Allreduce (深度神经网络的分布式计算范式 -------------- 环形全局规约)
作者:初七123链接:https://www.jianshu.com/p/8c0e7edbefb9来源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. ----------- ...
- 【转载】【转载视频】 如何成为好的IT技术面试官
在外网找到了一个IT技术面试官的面试心得,感觉还不错,挺有借鉴的,这里mark一下. 地址: https://www.youtube.com/watch?v=yFMmkoqDPlM ========= ...
- baselines算法库common/tile_images.py模块分析
该模块只有一个函数,全部内容: import numpy as np def tile_images(img_nhwc): """ Tile N images into ...
- nginx实战教程
大纲 为了让大家更快的学会,该博客中的内容录制成了视频课程:马上在线学习 1.什么是nginx Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 由 ...
- Ubuntu系统:NVIDIA显卡关闭图形显示 —— 彻底禁用NVIDIA GPU 的显示输出接口 —— ubuntu无桌面方式启动 —— NVIDIA显卡模式切换(显示模式切换为计算模式)
相关: ubuntu desktop改用无桌面方式启动 在使用Linux做异构计算等科学计算的时候一个常见的问题就是: NVIDIA显卡关闭图形显示 -- 彻底禁用NVIDIA GPU 的显示输出接口 ...
- flex 左右布局-----在手机端,当左侧宽度固定,右侧宽度自适应时,右侧会超出浏览器窗口的问题解决方案
废话不多说:直接上代码解决问题: 父级: .parent { display: flex; flex-flow: row; } 子级: .left-child { width:100px; } .ri ...
- CF506D题解
Mr. Kitayuta's Colorful Graph 算法:根号分治. 题目大意先说一下:给一个 \(n\) 点 \(m\) 边的无向图,边有颜色.\(q\) 组询问,每次给出 \(u,v\), ...
- VisionOn:新一代在线制图工具,简单易用又高颜值
Vision On 一款集流程图.思维导图.白板于一体的轻量级在线图形工具 在工作和学习过程中,通过可视化的图形,有助于清晰高效地表达我们的灵感.想法.思想. 工欲善其事,必先利其器. 目前,思维导图 ...
- 【解决方法】libGL.so.1: cannot open shared object file: No such file or directory
在配云端GPU服务器时,出现这个错误 File "/usr/local/lib/python3.6/dist-packages/cv2/__init__.py", line 8, ...