Назад к вопросам
Senior
4
Опиши алгоритм решения задачи подсчёта подстрок со всеми уникальными символами
Компании, где спрашивали
Яндекс
Ответ от нейросети
sobes.tech 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 — общее количество подстрок с уникальными символами.