Advertisement
vit134

Скобки (правильна последовательность)

Nov 5th, 2018
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     Составить правлильную последовательность скобок, если это невозможно вернуть null
  3.     correctBrackets("[}"); // "[]"
  4.     correctBrackets("[()}"); // "[()]"
  5.     correctBrackets("[[[)])"); // "[[[]]]"
  6.     correctBrackets("<{[(>}])"); // "<{[()]}>"
  7.     correctBrackets("]]"); // null
  8.     correctBrackets("[[[))"); // null
  9.     correctBrackets("{((])]"); // "{(())}"
  10. */
  11.  
  12.  
  13.  
  14. let str = '<{[(>}])';
  15.  
  16. let opening = {
  17.     '[': ']',
  18.     '{': '}',
  19.     '(': ')',
  20.     '<': '>',
  21. };
  22.  
  23. const correctBrackets = str => {
  24.     let stack = [];
  25.     let res = '';
  26.    
  27.     for (let i = 0; i < str.length; i++) {
  28.         let skobka = str[i];
  29.        
  30.         if (opening[skobka]) { // если скобка открывающая
  31.             stack.push(skobka); // добавляем ее в стэк
  32.         } else { // если скобка закрывающая
  33.             if(stack.length === 0) { // проверяем если в стэке пусто значит правильную последовательность построить нельзя
  34.                 return null;
  35.             }
  36.            
  37.             let open = stack.pop(); // берем последнюю открытую скобку из стэка
  38.             skobka = opening[open]; // находим ее закрывающую
  39.         }
  40.        
  41.         res += skobka; // добавляем скобку к результату
  42.     }
  43.    
  44.     if (stack.length > 0) { // проверяем если в стэке еще что то есть значит правильную последовательность построить нельзя
  45.       return null;
  46.     }
  47.    
  48.     return res;
  49. }
  50.  
  51. console.log(skobki(str));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement