Приложение для списка дел хранит задачи в типизированной коллекции вроде List<T>. У каждой задачи есть название и отметка о выполнении.
Начните с пустого списка и обработайте операции, каждая — команда и название (название — всё после первого пробела):
add <title>: добавить невыполненную задачу в конец, если задачи с таким названием ещё нет.done <title>: отметить эту задачу выполненной (ничего не делает, если её нет).remove <title>: удалить эту задачу (ничего не делает, если её нет).
Реализуйте todo_list(operations).
Входные данные
operations: Операции. Названия могут содержать пробелы и сравниваются точно.
Выходные данные
Верните названия невыполненных задач в порядке их добавления.
Ограничения
0 ≤ число операций ≤ 10,000
Названия длиной от 1 до 50 символов
Примеры
Ввод:
operations = ["add Buy milk", "add Write report", "done Buy milk", "add Call Ada"]
Ожидаемый вывод:
expected = ["Write report", "Call Ada"]
Ввод:
std::vector<std::string> operations = {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};
Ожидаемый вывод:
std::vector<std::string> expected = {"Write report", "Call Ada"};
Ввод:
string[] operations = new string[] {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};
Ожидаемый вывод:
string[] expected = new string[] {"Write report", "Call Ada"};
Пояснение
Buy milk выполнена, поэтому остаются две другие в порядке добавления: ["Write report", "Call Ada"].
Ввод:
operations = ["add Gym", "add Gym", "remove Gym", "done Gym"]
Ожидаемый вывод:
expected = []
Ввод:
std::vector<std::string> operations = {"add Gym", "add Gym", "remove Gym", "done Gym"};
Ожидаемый вывод:
std::vector<std::string> expected = {};
Ввод:
string[] operations = new string[] {"add Gym", "add Gym", "remove Gym", "done Gym"};
Ожидаемый вывод:
string[] expected = new string[] {};
Пояснение
Второй add игнорируется, потому что Gym уже есть; после удаления ничего не остаётся, а done для несуществующей задачи ничего не делает: [].
Как подступиться
Сначала попробуйте сами, затем открывайте подсказки по одной.
Подсказка 1
Храните каждую задачу как небольшую запись с названием и состоянием.
Подсказка 2
Ищите задачу по точному названию перед добавлением, отметкой или удалением.
Подсказка 3
В конце оставьте только невыполненные задачи в порядке добавления.
Ожидаемая сложность
время O(n²), доп. память O(n)
Ссылки
Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.