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 ...
随机推荐
- 【Java】PDF模板生成PDF文档
一.需求背景 客户要求一份文书,文书内容有一些表单项,例如: 1.基本的是和否 (单选框或复选框) 2.备注内容(纯文本信息) 3.单位,机构组织,人员,字典项(下拉选择) 4.用户数字签名(图片信息 ...
- 【Linux】11 RPM & YUM 管理工具 介绍
rpm包的管理 介绍: 一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中. 它生成具有.RPM扩展名的文件.RPM是RedHat Package Manager(RedHat软件包 ...
- ECMO(体外膜氧合)的使用费用为什么会这么高?
给一个大致的费用: 相关: https://www.bilibili.com/video/BV1rc411H7uT/ https://haokan.baidu.com/v?pd=wisenatural ...
- python之理解super及MRO列表 ( 示例版 )
例子 1: class A0: def pri(self): super().pri() print("A0") class A1(A0): def pri(self): su ...
- Ubuntu系统中CUDA套件nvvp启动后报错Unable to make protected void java.net.URLClassLoader.addURL(java.net.URL) accessible: module java.base does not "opens java.net" to unnamed module @380fb434
最近在看cuda方面的内容,需要对cuda代码做一些性能分析,于是需要使用nvvp,但是启动nvvp后报错:Caused by: java.lang.reflect.InaccessibleObjec ...
- 代码随想录Day8
344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 \(O(1)\) 的额外空间解决 ...
- Python-目标检测-将xml文件转换成.txt文件
代码说明:labels文件夹是工程下的一个文件夹,里面存放的是一些xml文件. 然后我们将这些xml文件中的内容取出来,放在路径path1的文件名下.这样也就完成了xml文件到txt文件的转化. 该代 ...
- MPTCP(五):MPTCP路径管理工具iproute2/ip-mptcp编译及安装
简介 ip-mptcp是一个MPTCP路径管理工具,它可以决定哪些链路允许作为MPTCP子流存在 仅对MPTCPv1有效 在支持MPTCPv1的内核中使用man ip-mptcp可以查看相关帮助 gi ...
- P7706 文文的摄影布置 题解
P7706 文文的摄影布置 题解 原题 读完题,发现是线段树.单点修改+区间查询. 不过查询的值有些奇怪,就是了,我们考虑用线段树维护这个 ψ 值(下称待求值). 对于一个区间的待求值,大概有四种情况 ...
- C#自定义结构体的(用SendMessage)传递
要传递结构体 public struct STUDENT { public int id; //ID public string name; //姓名 } 要引用Win32api函数FindWindo ...