В тестовых примерах Leetcode Valid Parantheses есть какие-то проблемы?

Вопрос о скобках Leetcode, по сути, должен сбалансировать скобки Пример 1:

Ввод: s = "()" Вывод: правда

Пример 2:

Ввод: s = "()[]{}" Вывод: правда

Пример 3:

Ввод: s = "(]" Вывод: ложь

Но для тестового примера «{[]}» я получаю вывод как ложь, хотя в моей IDE я получаю вывод как истину.


struct Node {
    char data;
    Node* next;
};
Node* top = nullptr;

void push(char a) {
    Node* temp = new Node;
    temp->data = a;
    temp->next = top;
    top = temp;
}

void pop() {
    if (top != nullptr) {
        Node* temp = top;
        top = top->next;
        delete temp;
    }
}

void Print(){
    Node *temp = top;
    while(temp!=NULL){
        cout<<temp->data<<endl;
        temp=temp->next;
    }
}

class Solution {
public:
    bool isValid(string s) {
        for (char c : s) {
            if (c == '(' || c == '{' || c == '[') {
                push(c);
                Print();
            } else {
                if (top == nullptr) return false;
                char topchar = top->data;
                if ((c == ')' && topchar == '(') || (c == '}' && topchar == '{') || (c == ']' && topchar == '[')) {
                    Print();
                    pop();
                    
                } else {
                    return false;
                }
            }
        }
        return top == nullptr;
    }
};

На этом изображении вы можете ясно видеть дополнительные фигурные скобки '(' в стандартном выводе, которые не указаны во входных данных

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

Примечание: если у вас нет действительно веской причины, например, кто-то направил заряженное оружие вам в голову и приказал вам это сделать, не создавайте свой собственный связанный список. Вместо этого используйте один из стандартных библиотек. В этом случае, поскольку вам нужен стек, std::stack, вероятно, ваш друг. Если вы думаете: «Но я хочу произвести впечатление на людей на собеседовании!» обычно это не лучший способ сделать это. Интервьюер почти всегда хочет увидеть ваше владение C++, а это включает в себя знание поставляемых с ним инструментов.

user4581301 13.08.2024 20:01

Примечание по использованию Stack Overflow: нам нравится минимализм, но нам нравится и компиляция, поэтому оставьте заголовки. Помните, что каждое изменение, которое нам нужно внести в ваш код для запуска вашего примера, — это для нас возможность случайно исправить проблему. и не отвечать, или вставлять, и писать ответы, исправляя новый баг. Любой исход для вас совершенно бесполезен, поэтому не оставляйте этот вариант на столе.

user4581301 13.08.2024 20:04

Я получил его для компиляции здесь: https://ideone.com/qpfIhb, но это потребовало некоторых усилий с моей стороны.

drescherjm 13.08.2024 20:05

Примечание по использованию Stack Overflow: в подобных вопросах вы почти всегда должны включать небольшую функцию main, которая вызывает вашу функцию с входными данными, которые приводят к сбою именно так, как вы описываете.

user4581301 13.08.2024 20:05

Похоже, вы начали соревноваться в программировании, не изучив предварительно C++. Вам действительно не следует писать такой код (больше). Мой совет: сначала изучите C++, например. посетите сайт Learncpp.com, узнайте, как использовать cppreference.com и, наконец, прочтите основные рекомендации по C++... только после этого приступайте к соревновательному программированию. Если вы занимаетесь программированием только для решения головоломок или думаете, что это поможет вам получить работу (спойлер, это не так), используйте другой язык, например Python (который гораздо легче выучить за короткое время).

Pepijn Kramer 13.08.2024 20:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
5
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Здесь у нас есть хрестоматийный пример опасности глобальных переменных. Если тест-кейс не пройден, в вашем связанном списке останется мусор, и вы не будете очищать список для каждого нового тест-кейса. Запуск этого теста сам по себе работает. Запуск этого теста после сбоя.

Вы можете просто установить top = nullptr; вверху функции, но это приведет к утечке всех узлов из неудавшегося теста. Возможно, вам следует очистить список перед выходом.

спасибо, чувак. Это решило мою проблему

vivekreddygiri 13.08.2024 20:16

Кстати, первый комментарий выше верен. Вы могли бы устранить эту проблему, используя std::stack или std::deque из стандартной библиотеки. Это вполне подходящий вариант для решения проблем LeetCode.

Tim Roberts 13.08.2024 20:22

В любом случае я поставлю +1, но ссылка на RAII может быть хорошим дополнением к этому ответу (в качестве альтернативы глобальному).

Kenny Ostrom 13.08.2024 20:24

@vivekreddygiri Если вы выберете быстрое и грязное решение с утечкой памяти, вы можете получить сбои «слишком много используемой памяти» позже при тестировании Leetcode. Лучше всего проделать дополнительную работу и решить эту проблему правильно.

user4581301 13.08.2024 20:25

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