Menu
Coddy logo textTech

Längste Serie

Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy. Lektion 35 von 56.

Eine Serie ist eine Folge aufeinanderfolgender Tage, an denen eine Gewohnheit als erledigt markiert wurde. Für die Tage [1, 2, 3, 5, 6] beträgt die längste Serie 3 (Tage 1–3).

Sobald du eine sortierte day-Liste hast, ist die Berechnung ein einfacher linearer Durchlauf: Vergleiche jeden day mit dem vorherigen, erweitere den aktuellen run, wenn sie aufeinanderfolgend sind, und setze ihn andernfalls zurück.

func longestStreak(_ days: [Int]) -> Int {
    let sorted = days.sorted()
    var best = 0
    var run = 0
    var prev: Int? = nil
    for d in sorted {
        if let p = prev, d == p + 1 {
            run += 1
        } else {
            run = 1
        }
        if run > best { best = run }
        prev = d
    }
    return best
}

Das Muster „aktuellen run verfolgen + best bisher“ tritt in vielen Problemen wieder auf. Erkenne es einmal, und es gehört für immer dir.

challenge icon

Aufgabe

Mittel

Lies eine einzelne Eingabezeile ein: eine durch Kommas getrennte Liste von habit:day-Einträgen. Erstelle dasselbe Wörterbuch wie in der vorherigen Lektion und berechne dann für jede Gewohnheit die längste Folge aufeinanderfolgender Tage innerhalb der Woche.

Gib die Gewohnheiten in alphabetischer Reihenfolge aus, eine pro Zeile, im Format:

<habit>: streak=<n>

Für die Eingabe read:1,read:2,read:3,read:5,workout:2,workout:4 lautet die Ausgabe:

read: streak=3
workout: streak=1

Probier es selbst

var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
for op in ops {
    let parts = op.components(separatedBy: ":")
    let day = Int(parts[1])!
    if !(habits[parts[0], default: []].contains(day)) {
        habits[parts[0], default: []].append(day)
    }
}

// TODO: längste Serie pro Gewohnheit, sortiert nach Name ausgeben als 'name: streak=n'
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Kontrollfluss

Übe selbstständig: Swift-Playground