Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 12.10.2019, 23:19
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от Alexandroppolus Посмотреть сообщение
Я не очень понял, что требуется. Это разновидность задачи о проверке скобочной целостности с тремя видами скобок?
она самая. Даже не разновидность Просто хотелось выйти за рамки самой задачи
Ответить с цитированием
  #12 (permalink)  
Старый 12.10.2019, 23:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

CryNet,
https://javascript.ru/forum/css-html...teki-v-js.html
Ответить с цитированием
  #13 (permalink)  
Старый 13.10.2019, 07:09
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,004

Сообщение от CryNet Посмотреть сообщение
она самая. Даже не разновидность Просто хотелось выйти за рамки самой задачи
Но символы * и # могут быть открывашками и закрывашками, эта роль, видимо, чередуется?
То есть '****' аналогична '()()', но не '(())', так?

Последний раз редактировалось Alexandroppolus, 13.10.2019 в 11:22.
Ответить с цитированием
  #14 (permalink)  
Старый 13.10.2019, 13:23
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

так
Ответить с цитированием
  #15 (permalink)  
Старый 13.10.2019, 18:24
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,004

var config = {
  '(': ')',
  '{': '}',
  '[': ']',
  '<': '>',
  '*': '*',
  '#': '#'
};

function checkParentheses(config, str) {
  if (!str || !config) { return true; }
  var stack = [];
  var closeChars = Object.create(null);
  Object.keys(config).forEach(function(open) {
    var close = config[open];
    closeChars[close] = open !== close;
  });
  for (var i = 0; i < str.length; ++i) {
    var char = str.charAt(i);
    var isClose = closeChars[char];
    var closeForChar = config[char];
    if (isClose) {
      if (!stack.length || stack.pop() !== char) {
        return false;
      }
    } else if (closeForChar) {
      stack.push(closeForChar);
    }
    if (char === closeForChar) {
      closeChars[char] = !closeChars[char];
    }
  }
  return !stack.length;
}

alert(checkParentheses(config, '(aaa*hjhg*)'));
alert(checkParentheses(config, '(aaa*hjhg)'));


Добавить новые символы будет нетрудно. Если открывашка совпадает с закрывашкой, то режим для символа переключается, начинаясь с открывашки
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить авторизован ли пользователь в соц сетях AnteFil Элементы интерфейса 3 28.11.2016 03:58
как проверить object на "пустоту" Cache Общие вопросы Javascript 7 06.02.2015 20:27
Как проверить на этом-ли хостинге стоит сайт из определнного домена? Gamestop Серверные языки и технологии 3 05.11.2012 06:51
Как проверить существование функции Aderba Общие вопросы Javascript 2 14.11.2008 16:09
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40