Sobes.tech
Intern

/* Se dă un șir de caractere. Găsiți numărul de perechi de indici i și j (i <= j), între care nu există caractere repetate. Pentru șirul "aba", răspunsul este 5: pot fi ASCII [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */

sobes.tech AI

Răspuns de la AI

Pentru a rezolva problema, trebuie să parcurgem toate subșirurile șirului și să verificăm că în fiecare subșir nu există caractere repetate. Pentru a face acest lucru eficient, putem folosi o fereastră glisantă cu doi indicatori și un set pentru a urmări caracterele unice.

Exemplu în 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
}

// Exemplu de utilizare:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // Va afișa 5

Ideea: extindem indicatorul din dreapta j atât timp cât caracterele sunt unice, apoi deplasăm indicatorul din stânga i, eliminând caracterele din set. Numărul de subșiruri unice care încep cu i este egal cu j - i.