Вопрос о скобках 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;
}
};
Я хочу знать, связана ли проблема с моей логикой или с тестовым набором, потому что в моей среде все работает нормально.
Примечание по использованию Stack Overflow: нам нравится минимализм, но нам нравится и компиляция, поэтому оставьте заголовки. Помните, что каждое изменение, которое нам нужно внести в ваш код для запуска вашего примера, — это для нас возможность случайно исправить проблему. и не отвечать, или вставлять, и писать ответы, исправляя новый баг. Любой исход для вас совершенно бесполезен, поэтому не оставляйте этот вариант на столе.
Я получил его для компиляции здесь: https://ideone.com/qpfIhb, но это потребовало некоторых усилий с моей стороны.
Примечание по использованию Stack Overflow: в подобных вопросах вы почти всегда должны включать небольшую функцию main
, которая вызывает вашу функцию с входными данными, которые приводят к сбою именно так, как вы описываете.
Похоже, вы начали соревноваться в программировании, не изучив предварительно C++. Вам действительно не следует писать такой код (больше). Мой совет: сначала изучите C++, например. посетите сайт Learncpp.com, узнайте, как использовать cppreference.com и, наконец, прочтите основные рекомендации по C++... только после этого приступайте к соревновательному программированию. Если вы занимаетесь программированием только для решения головоломок или думаете, что это поможет вам получить работу (спойлер, это не так), используйте другой язык, например Python (который гораздо легче выучить за короткое время).
Здесь у нас есть хрестоматийный пример опасности глобальных переменных. Если тест-кейс не пройден, в вашем связанном списке останется мусор, и вы не будете очищать список для каждого нового тест-кейса. Запуск этого теста сам по себе работает. Запуск этого теста после сбоя.
Вы можете просто установить top = nullptr;
вверху функции, но это приведет к утечке всех узлов из неудавшегося теста. Возможно, вам следует очистить список перед выходом.
спасибо, чувак. Это решило мою проблему
Кстати, первый комментарий выше верен. Вы могли бы устранить эту проблему, используя std::stack
или std::deque
из стандартной библиотеки. Это вполне подходящий вариант для решения проблем LeetCode.
В любом случае я поставлю +1, но ссылка на RAII может быть хорошим дополнением к этому ответу (в качестве альтернативы глобальному).
@vivekreddygiri Если вы выберете быстрое и грязное решение с утечкой памяти, вы можете получить сбои «слишком много используемой памяти» позже при тестировании Leetcode. Лучше всего проделать дополнительную работу и решить эту проблему правильно.
Примечание: если у вас нет действительно веской причины, например, кто-то направил заряженное оружие вам в голову и приказал вам это сделать, не создавайте свой собственный связанный список. Вместо этого используйте один из стандартных библиотек. В этом случае, поскольку вам нужен стек, std::stack, вероятно, ваш друг. Если вы думаете: «Но я хочу произвести впечатление на людей на собеседовании!» обычно это не лучший способ сделать это. Интервьюер почти всегда хочет увидеть ваше владение C++, а это включает в себя знание поставляемых с ним инструментов.