Problème
Une application de tâches les stocke dans une collection typée comme List<T>. Chaque tâche a un titre et un indicateur « faite ».
Partez d'une liste vide et traitez les opérations, chacune une commande et un titre (le titre est tout ce qui suit le premier espace) :
add <title>: ajoute une tâche en attente à la fin, sauf si une tâche de ce titre existe déjà.done <title>: marque cette tâche comme faite (sans effet si elle n'existe pas).remove <title>: supprime cette tâche (sans effet si elle n'existe pas).
Implémentez todo_list(operations).
Entrée
operations: Les opérations. Les titres peuvent contenir des espaces et sont comparés exactement.
Sortie
Renvoyez les titres des tâches non faites, dans l'ordre où elles ont été ajoutées.
Contraintes
0 ≤ nombre d'opérations ≤ 10,000
Les titres font de 1 à 50 caractères
Exemples
Entrée :
operations = ["add Buy milk", "add Write report", "done Buy milk", "add Call Ada"]
Sortie attendue :
expected = ["Write report", "Call Ada"]
Entrée :
std::vector<std::string> operations = {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};
Sortie attendue :
std::vector<std::string> expected = {"Write report", "Call Ada"};
Entrée :
string[] operations = new string[] {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};
Sortie attendue :
string[] expected = new string[] {"Write report", "Call Ada"};
Explication
Buy milk est faite, il ne reste donc que les deux autres, dans l'ordre d'ajout : ["Write report", "Call Ada"].
Entrée :
operations = ["add Gym", "add Gym", "remove Gym", "done Gym"]
Sortie attendue :
expected = []
Entrée :
std::vector<std::string> operations = {"add Gym", "add Gym", "remove Gym", "done Gym"};
Sortie attendue :
std::vector<std::string> expected = {};
Entrée :
string[] operations = new string[] {"add Gym", "add Gym", "remove Gym", "done Gym"};
Sortie attendue :
string[] expected = new string[] {};
Explication
Le second add est ignoré car Gym existe déjà ; la supprimer ne laisse rien, et done sur une tâche absente ne fait rien : [].
Comment l'aborder
Essayez d'abord seul, puis ouvrez les indices un par un.
Indice 1
Stockez chaque tâche comme un petit record de titre et d'état.
Indice 2
Cherchez une tâche par son titre exact avant de l'ajouter, la terminer ou la supprimer.
Indice 3
À la fin, ne gardez que les tâches non faites, dans l'ordre d'ajout.
Complexité attendue
temps O(n²), espace supplémentaire O(n)
Références
Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.