Sobes.tech
Intern

func countSubs(s string) int { result := 0 left := 0 hm := make(map[rune]int) n := len(s) for right := 0; right < n; right++ { hm[s[right]]++ for hm[s[right]] > 1 { hm[s[left]]-- if hm[s[left]] == 0 { delete(hm, s[left]) } left++ } result += (right - left + 1) } return result }

sobes.tech AI

პასუხი AI-სგან

ეს Go ფუნქცია ითვლის s სტრიქონში ყველა ქვესტრიქსის რაოდენობას, სადაც ყველა სიმბოლო უნიკალურია.

როგორ მუშაობს:

  • გამოიყენება მოძრავი ფანჯარა left და right საზღვრებით.
  • hm ინახავს მიმდინარე ფანჯრის თითოეული სიმბოლოს გამოჩენის რაოდენობას.
  • ფანჯრის გაფართოებისას მარჯვნივ, სიმბოლოს გამოთვლილი მატულობს.
  • თუ სიმბოლო მეორედ გამოჩნდება, მარცხენა საზღვარი გადაადგილდება, გამოთვლები მცირდება, სანამ ყველა სიმბოლო უნიკალური არ გახდება.
  • right პოზიციაზე დასრულებული უნიკალური ქვესტრიქსების რაოდენობა თანაბარია მიმდინარე ფანჯრის სიგრძესთან (right - left + 1).
  • ეს რაოდენობა ემატება ყველა პოზიციაზე.

მაგალითი:

func countSubs(s string) int {
    result := 0
    left := 0
    hm := make(map[rune]int)
    n := len(s)
    for right := 0; right < n; right++ {
        hm[rune(s[right])]++
        for hm[rune(s[right])] > 1 {
            hm[rune(s[left])]--
            if hm[rune(s[left])] == 0 {
                delete(hm, rune(s[left]))
            }
            left++
        }
        result += (right - left + 1)
    }
    return result
}

ამ გზით, ფუნქცია ეფექტურად ითვლის უნიკალური სიმბოლოს მქონე ქვესტრიქსების რაოდენობას დროით O(n).