Senior
Опишете алгоритъма за решаване на задачата за броене на поднизове с всички уникални символи
sobes.tech AI
Отговор от AI
За да изчислите броя на поднизовете с уникални символи, обикновено се използва алгоритъмът "плъзгащо се прозорец" (sliding window). Идеята е да се поддържа прозорец, в който всички символи са уникални, и да се движи по низът, като се брои броят на такива поднизове.
Основни стъпки:
- Използвайте два указателя —
leftиright, които определят границите на прозореца. - Използвайте структура от данни (например, карта или масив) за проследяване на срещаните символи и техните количества.
- Разширявайте прозореца надясно, като добавяте символи, докато всички са уникални.
- Ако се срещне повторящ се символ, преместете левия указател надясно, намалявайки броя на символите, докато повторът изчезне.
- На всяка стъпка можете да броите броя на уникалните поднизове, например, като добавите
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 представлява общия брой на поднизовете с уникални символи.