Sobes.tech
Intern

/* Er wordt een tekenreeks gegeven. Vind het aantal paren indices i en j (i <= j), tussen welke geen herhaalde tekens zijn. Voor de string "aba" is het antwoord 5: kunnen ASCII zijn [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */

sobes.tech AI

Antwoord van AI

Om het probleem op te lossen, moet je alle substrings van de string doorlopen en controleren of er geen herhaalde tekens in elke substring zijn. Om dit efficiënt te doen, kun je een schuivend venster gebruiken met twee pointers en een verzameling om de unieke tekens bij te houden.

Voorbeeld in Go:

func countUniqueSubstrings(s string) int {
    n := len(s)
    count := 0
    chars := make(map[byte]bool)
    j := 0

    for i := 0; i < n; i++ {
        for j < n && !chars[s[j]] {
            chars[s[j]] = true
            j++
        }
        count += j - i
        delete(chars, s[i])
    }
    return count
}

// Voorbeeld van gebruik:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // Drukt 5 af

Idee: we breiden de rechter pointer j uit zolang de tekens uniek zijn, daarna verschuiven we de linker pointer i, waarbij we de tekens uit de verzameling verwijderen. Het aantal unieke substrings dat begint met i is gelijk aan j - i.