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).