Intern
/* Bir karakter dizisi verilir. i ve j indeks çiftlerinin sayısını bulun (i <= j), bunlar arasında tekrar eden karakterler yok. "aba" dizisi için cevap 5: ASCII olabilir [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
sobes.tech yapay zeka
AI'dan gelen yanıt
Sorunu çözmek için, dizenin tüm alt dizilerini dolaşmak ve her alt dizide tekrar eden karakterler olmadığını kontrol etmek gerekir. Bunu verimli hale getirmek için, iki göstergeyle kayan pencere ve benzersiz karakterleri izlemek için bir küme kullanabilirsiniz.
Go dilinde örnek:
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
}
// Kullanım örneği:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // 5 yazdırır
Fikir: Sağ gösterge j karakterler benzersiz olduğu sürece genişletilir, sonra sol gösterge i kaydırılır ve kümeden karakterler kaldırılır. i ile başlayan benzersiz alt dizilerin sayısı j - i'ye eşittir.