Sobes.tech
Intern

/* Берилген символдар жолы. i жана j көрсөткүчтөрүнүн жуптарын санын табыңыз (i <= j), алардын ортосунда кайталанган символдор жок. "aba" жолу үчүн жооп 5: ASCII болушу мүмкүн [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-ს.