Назад к вопросам
Intern
7
/* дана строка символов. Найти количество пар индексов i и j (i <= j), между которыми нет повторяющихся символов. Для строки "aba" ответ 5: могут быть не только аски [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
Компании, где спрашивали
Яндекс
Ответ от нейросети
sobes.tech AI
Для решения задачи нужно посчитать количество подстрок строки, в которых все символы уникальны (нет повторяющихся символов).
Подход с использованием двух указателей (двух окон):
- Используем два индекса:
startиend, которые обозначают границы текущего окна. - Расширяем
end, добавляя символы, пока не встретится повтор. - Если повтор встретился, сдвигаем
startвправо, удаляя символы из текущего окна, пока повтор не исчезнет. - Для каждого положения
endколичество новых подстрок с уникальными символами равно длине текущего окна.
Пример на Go:
func countUniqueSubstrings(s string) int {
count := 0
charIndex := make(map[rune]int)
start := 0
runes := []rune(s)
for end, ch := range runes {
if prev, found := charIndex[ch]; found && prev >= start {
start = prev + 1
}
charIndex[ch] = end
count += end - start + 1
}
return count
}
// Пример использования:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // Выведет 5
Здесь мы считаем количество подстрок с уникальными символами, что соответствует количеству пар индексов i, j, где подстрока s[i..j] не содержит повторов.