问题描述:

Write a function that takes a string of braces, and determines if the order of the braces is valid. It should return true if the string is valid, and false if it's invalid.

This Kata is similar to the Valid Parentheses Kata, but introduces new characters: brackets [], and curly braces {}. Thanks to @arnedag for the idea!

All input strings will be nonempty, and will only consist of parentheses, brackets and curly braces: ()[]{}.

What is considered Valid?

A string of braces is considered valid if all braces are matched with the correct brace.

Examples

"(){}[]"   =>  True
"([{}])" => True
"(}" => False
"[(])" => False
"[({})](]" => False

我的答案:

 function validBraces(braces){
//TODO
var str=braces.split("");
var stack=[];
var RegExp=/[\(\{\[]/;
for(var i=0;i<str.length;i++){
if(str[i].match(RegExp)){
stack.push(str[i]);
}else{
switch (str[i]){
case ")":
if(stack.pop()!=="("){return false;}break;
case "}":
if(stack.pop()!=="{"){return false;} break;
case "]":
if(stack.pop()!=="["){return false;}break;
}
}
} if(stack.length==0){return true;}
else{return false;}
}

优秀答案:

 function validBraces(braces){
while(/\(\)|\[\]|\{\}/g.test(braces)){braces = braces.replace(/\(\)|\[\]|\{\}/g,"")}
return !braces.length;
}
 function validBraces(braces){
var matches = { '(':')', '{':'}', '[':']' };
var stack = [];
var currentChar; for (var i=0; i<braces.length; i++) {
currentChar = braces[i]; if (matches[currentChar]) { // opening braces
stack.push(currentChar);
} else { // closing braces
if (currentChar !== matches[stack.pop()]) {
return false;
}
}
} return stack.length === 0; // any unclosed braces left?
}

本题很自然就想到了使用栈的方法。但是对于使用键值数组,想到该方法,但是不会使用。另外对于replace("()","")这种巧妙的方法确实没有想到。

codewars--js--Valid Braces--正则、键值数组的更多相关文章

  1. php 键值数组搜索查询

    php  键值数组查询 ,需要先将其转换为纯数组,然后才能用in_array 进行搜索. $arr_combos = [ ['id' => '1001', 'value' => 'zs' ...

  2. js将一个具有相同键值对的一维数组转换成二维数组

    这两天,一个前端朋友在面试的笔试过程中遇到了一道类似于"用js实现将一个具有相同code值的一维数组转换成相同code值在一起的二维数组"的题目.他面试过后,把这个问题抛给了我,问 ...

  3. JS的Key-Val(键值对)设置Key为动态的方法

    问题描述: 需要生成一个对象, 这个对象为 {key: value}, 现在要让key是动态的 解决方案: function(key, value){ let keyValue = {}; keyVa ...

  4. js遍历localStorage的键值对

    //遍历本地存储localStorage for (var i = 0; i < localStorage.length; i++) { var key = localStorage.key(i ...

  5. js:数组里面获取键名和键值

    在写php时用ajax异步传回的返回数组时是json格式,在js里面处理时有时需要用到键名,此时可以用in来处理 js只有数字索引: <script> var data = new arr ...

  6. js 如何让两个等长的数组产生键值对关系

    问题的准确描述:js 将两个长度一样的一维数组 合成一个一维数组,A为键值,B为key值 js 将两个长度一样的一维数组 合成一个一维数组,A为键值,B为key值 如 var arr1=['a','b ...

  7. js变量作为数组对象的键值方法

    js变量作为数组对象的键值方法,变量键值获取数组值 js也可以像php的数组一样用下标获取数组的值,方法是: var arr = {'key':'abc'}; var key = 'key'; con ...

  8. 浅谈js的键值对key和value

    > 昨晚无意中看到类似下面结构的一段代码的取值问题,引起我的兴趣,花了点时间写了个demo给大家分享一下... var obj = [ {"2011":{"name ...

  9. 【转】js 对象按照键值(不分区大小写)排序,生成签名方法

    客户需求小程序端用js生成签名,我们按照要求一步一步解决,并且将请求方法封装到一个utils.js里: 第一步:对关联数组按照键名做正序排序. 第二步:拼接字符串 第三步:将拼接的字符串加上私钥 第四 ...

随机推荐

  1. C语言实现按位拷贝

    在程序开发过程中,我们经常会用到按位拷贝一串二进制数,在此提供一个按位拷贝的函数给大家参考,函数源码如下: #define char_t char #define uint8_t unsigned c ...

  2. hadoop中两种上传文件方式

    记录如何将本地文件上传至HDFS中 前提是已经启动了hadoop成功(nodedate都成功启动) ①先切换到HDFS用户 ②创建一个user件夹 bin/hdfs dfs -mkdir /user ...

  3. Ubuntu下makefile的简单使用

    在Windows下,只需要简单的点击以下make,rebuild即可.而在Linux下,这样的IDE环境并没有提供,难道必须每一步都执行一遍吗?比较ok的做法自然是能够利用批处理脚本来进行操作了,这样 ...

  4. 优雅写Java之二(数组集合流)

    一.数组 二.集合 三.流 学习整理中,本文待补充--

  5. H.264原理

    前言 H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的.随着 x264/openh264以及ffmpeg等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大降低了人 ...

  6. 如何理解Unicode,UTF-8,UTF-16。

  7. mysql建立高效索引分析

    一.如何建立理想的索引? 查询频繁度 区分度 索引长度 覆盖字段 1.1区分度 假设100万用户,性别基本上男/女各为50W, 区分度就低. 1.2长度小 索引长度直接影响索引文件的大小,影响增删改的 ...

  8. 20190708三人开黑CF模拟赛

    7月8号晚上8点和两位巨佬开了一场虚拟cf: [Helvetic Coding Contest 2018 online mirror (teams allowed, unrated)] 我这么蔡,只A ...

  9. 曹工说Spring Boot源码(15)-- Spring从xml文件里到底得到了什么(context:load-time-weaver 完整解析)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  10. ROS和Gazebo进行机器人仿真(一)

    Gazebo是一种多机器人仿真器,可用于室内外机器人仿真.Gazebo在ROS中有良好的接口,包含ROS和Gazebo的所有控制. 若要实现ROS到Gazebo的通信,我们必须安装ROS-Gazebo ...