Sobes.tech
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.