Sobes.tech
Senior

Опишете алгоритъма за решаване на задачата за броене на поднизове с всички уникални символи

sobes.tech AI

Отговор от AI

За да изчислите броя на поднизовете с уникални символи, обикновено се използва алгоритъмът "плъзгащо се прозорец" (sliding window). Идеята е да се поддържа прозорец, в който всички символи са уникални, и да се движи по низът, като се брои броят на такива поднизове.

Основни стъпки:

  1. Използвайте два указателя — left и right, които определят границите на прозореца.
  2. Използвайте структура от данни (например, карта или масив) за проследяване на срещаните символи и техните количества.
  3. Разширявайте прозореца надясно, като добавяте символи, докато всички са уникални.
  4. Ако се срещне повторящ се символ, преместете левия указател надясно, намалявайки броя на символите, докато повторът изчезне.
  5. На всяка стъпка можете да броите броя на уникалните поднизове, например, като добавите right - left + 1.

Пример на Go:

func countUniqueSubstrings(s string) int {
    freq := make(map[rune]int)
    left, count := 0, 0
    for right, ch := range s {
        freq[ch]++
        for freq[ch] > 1 {
            freq[rune(s[left])]--
            left++
        }
        count += right - left + 1
    }
    return count
}

Тук count представлява общия брой на поднизовете с уникални символи.