Sobes.tech
Intern

/* Dat je niz znakova. Pronađite broj parova indeksa i i j (i <= j), između kojih nema ponovljenih znakova. Za niz "aba" odgovor je 5: mogu biti ASCII [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */

sobes.tech АИ

Одговор од АИ

Da bismo riješili zadatak, potrebno je proći kroz sve podnizove niza i provjeriti da u svakom podnizu nema ponovljenih znakova. Da bismo to efikasno uradili, možemo koristiti klizno okno sa dva pokazivača i skup za praćenje jedinstvenih znakova.

Primer u 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
}

// Primer za korišćenje:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // Ispisaće 5

Ideja: proširujemo desni pokazivač j dok su znakovi jedinstveni, zatim pomeramo levi pokazivač i i uklanjamo znakove iz skupa. Broj jedinstvenih podnizova koji počinju sa i je jednak j - i.