Intern
/* Berilgan belgilar satri. i va j indeks juftliklarining sonini toping (i <= j), ular orasida takrorlangan belgilar yo'q. "aba" satri uchun javob 5: ASCII bo'lishi mumkin [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
sobes.tech AI
AIден жооп
Маселе чечүү үчүн, саптын бардык кичинекей тилкелерин өтүп, ар бир тилкеде кайталанган белгилер жок экенин текшерүү керек. Бул натыйжалуу болушу үчүн, эки көрсөткүч менен жылдырма терезе жана уникалдуу белгилерди көзөмөлдөө үчүн топ колдонсо болот.
Мисал Goда:
func countUniqueSubstrings(s string) int {
n := len(s)
count := 0
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
}
// Колдонуунун мисалы:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // 5 чыгат
Идея: оң көрсөткүч j уникалдуу болгонго чейин кеңейтилет, андан кийин сол көрсөткүч i жылдырылып, белгилер топтон алынып салынат. i менен башталган уникалдуу кичинекей тилкелердин саны j - i менен барабар.