Problem
Eine To-do-App speichert Aufgaben in einer typisierten Collection wie List<T>. Jede Aufgabe hat einen Titel und ein Erledigt-Flag.
Beginne mit einer leeren Liste und verarbeite die Operationen, jeweils ein Befehl und ein Titel (der Titel ist alles nach dem ersten Leerzeichen):
add <title>: fügt am Ende eine offene Aufgabe hinzu, außer es gibt schon eine mit diesem Titel.done <title>: markiert diese Aufgabe als erledigt (keine Wirkung, wenn es sie nicht gibt).remove <title>: löscht diese Aufgabe (keine Wirkung, wenn es sie nicht gibt).
Implementiere todo_list(operations).
Eingabe
operations: Die Operationen. Titel können Leerzeichen enthalten und werden exakt verglichen.
Ausgabe
Gib die Titel der nicht erledigten Aufgaben in der Reihenfolge zurück, in der sie hinzugefügt wurden.
Einschränkungen
0 ≤ Anzahl der Operationen ≤ 10,000
Titel haben 1 bis 50 Zeichen
Beispiele
Eingabe:
operations = ["add Buy milk", "add Write report", "done Buy milk", "add Call Ada"]
Erwartete Ausgabe:
expected = ["Write report", "Call Ada"]
Eingabe:
std::vector<std::string> operations = {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};
Erwartete Ausgabe:
std::vector<std::string> expected = {"Write report", "Call Ada"};
Eingabe:
string[] operations = new string[] {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};
Erwartete Ausgabe:
string[] expected = new string[] {"Write report", "Call Ada"};
Erläuterung
Buy milk ist erledigt, also bleiben nur die anderen beiden in der Reihenfolge des Hinzufügens: ["Write report", "Call Ada"].
Eingabe:
operations = ["add Gym", "add Gym", "remove Gym", "done Gym"]
Erwartete Ausgabe:
expected = []
Eingabe:
std::vector<std::string> operations = {"add Gym", "add Gym", "remove Gym", "done Gym"};
Erwartete Ausgabe:
std::vector<std::string> expected = {};
Eingabe:
string[] operations = new string[] {"add Gym", "add Gym", "remove Gym", "done Gym"};
Erwartete Ausgabe:
string[] expected = new string[] {};
Erläuterung
Das zweite add wird ignoriert, weil Gym schon existiert; nach dem Entfernen bleibt nichts übrig, und done auf eine fehlende Aufgabe bewirkt nichts: [].
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
Speichere jede Aufgabe als kleinen Record aus Titel und Erledigt-Status.
Hinweis 2
Suche eine Aufgabe über ihren exakten Titel, bevor du sie hinzufügst, erledigst oder entfernst.
Hinweis 3
Behalte am Ende nur die offenen Aufgaben in Einfügereihenfolge.
Erwartete Komplexität
Zeit O(n²), zusätzlicher Speicher O(n)
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.