Sobes.tech
Intern

/* Berilgan satr belgilar. i va j indekslarining juftligini toping (i <= j), ular orasida takrorlanadigan 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

AIdan javob

Muammoni hal qilish uchun, satrning barcha kichik satrlarini yurish va har bir kichik satrda takrorlangan belgilarning bo'lmaganligini tekshirish kerak. Bu samarali qilish uchun, ikki ko'rsatkichli siljish oynasi va noyob belgilarning kuzatuvi uchun to'plamdan foydalanish mumkin.

Go tilida misol:

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
}

// Foydalanish misoli:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // 5 ni chiqaradi

G'oya: o'ng ko'rsatkich j ni, belgilar noyob bo'lsa, kengaytiramiz, so'ngra chap ko'rsatkich i ni harakatlantirib, to'plamdan belgilarni olib tashlaymiz. i bilan boshlanuvchi noyob kichik satrlar soni j - i ga teng.