Back to questions
Intern
3
/* дана строка символов. Найти количество пар индексов i и j (i <= j), между которыми нет повторяющихся символов. Для строки "aba" ответ 5: [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
Companies where asked
Яндекс
Answer from AI
sobes.tech AI
Чтобы найти количество пар индексов (i, j), для которых подстрока s[i:j+1] не содержит повторяющихся символов, можно использовать метод "скользящего окна" (two pointers).
Идея:
- Используем два указателя: start и end, которые будут обозначать текущий рассматриваемый интервал.
- Расширяем end, пока символы уникальны.
- Когда встречаем повтор, сдвигаем start, удаляя символы из множества.
- Для каждого положения end считаем количество подстрок без повторов, которые заканчиваются в end.
Пример на Go:
func countUniqueSubstrings(s string) int {
seen := make(map[rune]int)
start := 0
count := 0
for end, ch := range s {
if pos, ok := seen[ch]; ok && pos >= start {
start = pos + 1
}
seen[ch] = end
count += end - start + 1
}
return count
}
// Для "aba" функция вернет 5
Здесь count аккумулирует количество уникальных подстрок без повторяющихся символов.