zoukankan      html  css  js  c++  java
  • codewars--js--Valid Braces--正则、键值数组

    问题描述:

    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

    我的答案:

     1 function validBraces(braces){
     2   //TODO 
     3   var str=braces.split("");
     4   var stack=[];
     5   var RegExp=/[({[]/;
     6   for(var i=0;i<str.length;i++){
     7     if(str[i].match(RegExp)){
     8       stack.push(str[i]);
     9     }else{
    10       switch (str[i]){
    11       case ")":
    12         if(stack.pop()!=="("){return false;}break; 
    13       case "}":
    14         if(stack.pop()!=="{"){return false;} break;  
    15       case "]":
    16         if(stack.pop()!=="["){return false;}break; 
    17       }
    18     }
    19   }
    20   
    21   if(stack.length==0){return true;}
    22   else{return false;}
    23 }

    优秀答案:

    1 function validBraces(braces){
    2  while(/()|[]|{}/g.test(braces)){braces = braces.replace(/()|[]|{}/g,"")}
    3  return !braces.length;
    4 }
     1 function validBraces(braces){
     2   var matches = { '(':')', '{':'}', '[':']' };
     3   var stack = [];
     4   var currentChar;
     5 
     6   for (var i=0; i<braces.length; i++) {
     7     currentChar = braces[i];
     8 
     9     if (matches[currentChar]) { // opening braces
    10       stack.push(currentChar);
    11     } else { // closing braces
    12       if (currentChar !== matches[stack.pop()]) {
    13         return false;
    14       }
    15     }
    16   }
    17 
    18   return stack.length === 0; // any unclosed braces left?
    19 }

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

  • 相关阅读:
    [LeetCode] 500. Keyboard Row 键盘行
    [LeetCode] 502. IPO 上市
    [LeetCode] 495. Teemo Attacking 提莫攻击
    [LeetCode] 655. Print Binary Tree 打印二叉树
    [LeetCode] 654. Maximum Binary Tree 最大二叉树
    [LeetCode] 637. Average of Levels in Binary Tree 二叉树的层平均值
    Dubbo 在maven项目中的应用
    前后端分离springmvc和RESTful理解
    一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值
    MAC OS查看端口占用情况及杀死进程
  • 原文地址:https://www.cnblogs.com/hiluna/p/8854187.html
Copyright © 2011-2022 走看看