Sobes.tech
Intern

/* Даден е низ от символи. Намерете броя на двойките индекси i и j (i <= j), между които няма повтарящи се символи. За низа "aba" отговорът е 5: може да са ASCII [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */

sobes.tech AI

Отговор от AI

За решаването на задачата трябва да преминем през всички поднизове на низа и да проверим дали във всеки подниз няма повтарящи се символи. За да направим това ефективно, можем да използваме двоен показалец с плъзгащо се окно и множество за проследяване на уникалните символи.

Пример на 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
}

// Пример за използване:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // Ще изведе 5

Идея: разширяваме десния показалец j, докато символите са уникални, след което преместваме левия показалец i, като премахваме символите от множеството. Броят на уникалните поднизове, започващи с i, е равен на j - i.