Назад к вопросам
Intern
1
""" Дана строка символов. Найти количество пар индексов i и j (i <= j), между которыми, включительно, нет повторяющихся символов. Для строки "aba" ответ 5: [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") Для строки "abcb" ответ ?: aba 3 + 2 = 5 abcb a ab b abc bc c cb b 4(a, b, c, d) + 1(ab) + 1(bc) + 1(cb) + 1(abc) = 8 """
Компании, где спрашивали
Яндекс
Ответ от нейросети
sobes.tech AI
Задача — найти количество пар индексов [i, j] (i ≤ j), таких что подстрока s[i..j] содержит только уникальные символы.
Для строки "abcb" рассмотрим все подстроки без повторяющихся символов:
- [0,0] "a"
- [0,1] "ab"
- [1,1] "b"
- [1,2] "bc"
- [2,2] "c"
- [2,3] "cb"
- [3,3] "b"
Итого 7 подстрок.
Пример решения на Go с использованием двух указателей и множества для отслеживания символов:
def countUniqueSubstrings(s string) int {
count := 0
n := len(s)
chars := make(map[byte]bool)
j := 0
for i := 0; i < n; i++ {
for j < n && !chars[s[j]] {
chars[s[j]] = true
j++
}
count += j - i
delete(chars, s[i])
}
return count
}
// Пример вызова
// fmt.Println(countUniqueSubstrings("abcb")) // Выведет 7
Алгоритм работает за O(n), скользящее окно расширяется и сужается, обеспечивая подсчет всех подстрок с уникальными символами.