Intern
func countSubs(s string) int { result := 0 left := 0 hm := make(map[rune]int) for right := 0; right < len(s); 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-სგან
countSubs ფუნქცია ითვლის s სტრიქონში იმ ქვესრიგების რაოდენობას, სადაც ყველა სიმბოლო უნიკალურია.
ალგორითმი იყენებს "გადმოძრავებადი ფანჯრის" მეთოდს ორი ინდიკატორით left და right. hm ლექსიკონი ინახავს თითოეული სიმბოლოს გამოჩენის რაოდენობას მიმდინარე ფანჯარაში.
- როდესაც ვრცელდებით ფანჯარას მარჯვნივ, ვზრდით სიმბოლოს გამოთვლას.
- თუ სიმბოლო მეორედ გამოჩნდება, ვიწევთ მარცხენა ინდიკატორს, ამცირებთ გამოთვლებს, სანამ გამეორება არ გაქრება.
rightპოზიციაზე დამთავრებული უნიკალური ქვესრიგების რაოდენობა თანაბარია მიმდინარე ფანჯრის სიგრძეს(right - left + 1).- ამ მნიშვნელობას ვამატებთ ყველა პოზიციაზე.
გამოყენების მაგალითი:
total := countSubs("abc") // total = 6, ქვესრიგები: "a", "b", "c", "ab", "bc", "abc"
ამ გზით, ფუნქცია ეფექტურად ითვლის უნიკალური სიმბოლოს გარეშე ქვესრიგების რაოდენობას O(n) დროში.