Intern
/* Dotā rakstzīmju virkne. Atrodiet indeksu i un j pāru skaitu (i <= j), starp kuriem nav atkārtotu rakstzīmju. Vērtība "aba" ir 5: var būt ASCII [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
sobes.tech AI
Atbilde no AI
Lai risinātu uzdevumu, ir nepieciešams pārskatīt visas virknes apakšvirknes un pārbaudīt, vai katrā apakšvirknē nav atkārtotu rakstzīmju. To efektīvi var izdarīt, izmantojot slīdējošo logu ar diviem rādītājiem un kopu, kas uzrauga unikālas rakstzīmes.
Piemērs Go valodā:
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
}
// Piemērs lietošanai:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // Izdrukās 5
Ideja: paplašinām labo rādītāju j, kamēr rakstzīmes ir unikālas, tad pārvietojam kreiso rādītāju i un dzēšam rakstzīmes no kopas. Skaits unikālo apakšvirkņu, kas sākas ar i, ir vienāds ar j - i.