Intern
/* Verilən simvol sətiri. i və j indeksləri cütlüyünün sayını tapın (i <= j), bunlar arasında təkrarlanan simvollar yoxdur. "aba" sətiri üçün cavab 5: ASCII ola bilər [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
sobes.tech Süni İntellekt
AI-dan cavab
Məsələnin həllini tapmaq üçün, sətirin bütün alt sətirlərini keçməli və hər alt sətirdə təkrarlanan simvolların olmadığını yoxlamalısınız. Bu işi effektiv etmək üçün, iki göstərici ilə hərəkət edən sürüşən pəncərə və unikal simvolları izləmək üçün bir toplusundan istifadə edə bilərsiniz.
Go dilində nümunə:
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
}
// İstifadə nümunəsi:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // 5 çap edir
Fikir: sağ göstərici j simvollar unikal olduğu müddətdə genişlənir, sonra sol göstərici i hərəkət etdirilir və simvollar toplanmadan silinir. i ilə başlayan unikal alt sətirlərin sayı j - i-ə bərabərdir.