Intern
/* Берилген символдордун тизмеси. i жана j көрсөткүчтөрүнүн жуптарынын санын табыңыз (i <= j), алардын ортосунда кайталанган символдор жок. "aba" тизмеси үчүн жооп 5: тек гана ASCII эмес болушу мүмкүн [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
sobes.tech AI
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] не содержит повторов.