Решение Leetcode работает на моем компьютере, но не на веб-сайте (допустимая скобка)

Я новичок в leetcode и получаю неправильный результат для решения этой проблемы, но я не вижу в этом никаких очевидных проблем. Когда я запускаю код на своем компьютере по вопросу, он не работает, но на сайте он дает неверный результат.

const leftBrackets = ["(", "{", "["];
const matchBrackets = { ")": "(", "}": "{", "]": "[" };
const testStack = [];

var isValid = function (s) {
  for (const char of s) {
    if (leftBrackets.includes(char)) {
      testStack.push(char);
    } else if (testStack[testStack.length - 1] === matchBrackets[char]) {
      testStack.pop();
    }
  }

  if (testStack.length === 0) return true;
  else return false;
};

Это вопрос: https://leetcode.com/problems/valid-parentheses/submissions/

Это мой ответ на вопрос. Когда я запускаю его, сайт говорит, что код получил неправильный результат для «{[]}» в качестве ввода. Он говорит, что возвращает false, но когда я запускаю его в NodeJS на своем компьютере, он возвращает true. кто-нибудь знает, почему это произошло? Я просто хочу иметь возможность проверить, когда у меня есть решение проблемы. Я также хотел бы получить отзыв о моем решении, если вы все равно отвечаете. Я пытаюсь сделать свои решения более эффективными, не прибегая к простому поиску всего. Кажется, что это должно быть легко возможно с O (n).

Спасибо всем, кто ответит!

Обновлено: я добавил свое полное решение ниже, если кто-то, работающий над этим вопросом, увидит этот пост. Он очень хорошо справился со скоростью (56 мс, быстрее, чем 98%), поэтому я думаю, что он довольно эффективен. Также кажется случайным, сколько времени это займет, лол.

var isValid = function (s) {
  
  const leftBrackets = ["(", "{", "["];
  const matchBrackets = { ")": "(", "}": "{", "]": "[" };
  const testStack = [];
  
  if (s.length % 2 !== 0) return false;
  
  for (const char of s) {
    if (leftBrackets.includes(char)) {
      testStack.push(char);
    } else if (testStack[testStack.length - 1] === matchBrackets[char]) {
      testStack.pop();
    } else return false;
  }
  
  if (testStack.length === 0) return true;
  else return false;
};
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
0
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вероятно, вам просто нужно переместить testStack внутрь функции, иначе он будет сохраняться для всех вызовов isValid. Вот еще один ложноотрицательный пример:

const leftBrackets = ["(", "{", "["];
const matchBrackets = { ")": "(", "}": "{", "]": "[" };
const testStack = [];

var isValid = function (s) {
  for (const char of s) {
    if (leftBrackets.includes(char)) {
      testStack.push(char);
    } else if (testStack[testStack.length - 1] === matchBrackets[char]) {
      testStack.pop();
    }
  }

  if (testStack.length === 0) return true;
  else return false;
};

console.log(isValid('('));
console.log(isValid('[]'));

Так что просто сделай

var isValid = function (s) {
  const testStack = [];

так что каждый вызов имеет свой собственный массив.

Ваш вопрос не включает описание проблемы, но потенциальная ошибка заключается в том, что вы не проверяете, используется ли неправильная правая скобка. Например, если вы хотите, чтобы строка

(])

чтобы потерпеть неудачу, вам нужно изменить свою логику - либо нажать, либо вытолкнуть, и если ни одно из условий не выполняется, возможно, вы захотите return false.

Благодарю вас! Я думаю, что это было. Похоже, после добавления проверки на неровные начальные строки мне не хватает 3 крайних случаев, поэтому я поработаю над этим тогда.

Connor Mullin 10.04.2022 07:15

Другие вопросы по теме