Einfach 0 gelöst 0% Erfolgsquote

To-do-Liste

Verwalte eine Aufgabenliste: hinzufügen, erledigen, entfernen und melden, was noch offen ist.

Das lernst du

  • Aufgaben mit Titel und Erledigt-Flag verwalten
  • Einen Eintrag vor dem Ändern per Titel finden
  • Die noch offenen Einträge filtern

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

Beispiel 1
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"].

Beispiel 2
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.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.