Senior
Írja le az algoritmust az összes egyedi karaktert tartalmazó al-sorozatok számolási feladat megoldásához
sobes.tech MI
Válasz az MI-től
Az egyedi karakterekből álló szubsztringek számának kiszámításához általában a "csúszó ablak" (sliding window) algoritmust használják. Az ötlet az, hogy egy olyan ablakot tartunk fenn, amelyben minden karakter egyedi, és azt végig mozgatjuk a szövegben, számolva az ilyen szubsztringek számát.
Fő lépések:
- Két mutatót használjunk —
leftésright, amelyek az ablak határait határozzák meg. - Egy adatstruktúrát (pl. térképet vagy tömböt) használjunk a talált karakterek és azok számának nyomon követésére.
- Az ablakot jobbra bővítsük, karaktereket hozzáadva, amíg mindegyik egyedi marad.
- Ha ismétlődő karaktert találunk, mozgassuk a bal mutatót jobbra, csökkentve a karakterek számlálóját, amíg az ismétlődés el nem tűnik.
- Minden lépésben számolhatjuk az egyedi szubsztringek számát, például hozzáadva
right - left + 1.
Példa Go nyelven:
func countUniqueSubstrings(s string) int {
freq := make(map[rune]int)
left, count := 0, 0
for right, ch := range s {
freq[ch]++
for freq[ch] > 1 {
freq[rune(s[left])]--
left++
}
count += right - left + 1
}
return count
}
Itt a count az összes olyan szubsztring számát jelenti, amelyben minden karakter egyedi.