Решение 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;
};
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
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.info(isValid('('));
console.info(isValid('[]'));

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

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

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

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

(])

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

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

Connor Mullin 10.04.2022 07:15

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