Sobes.tech
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:

  1. Két mutatót használjunk — left és right, amelyek az ablak határait határozzák meg.
  2. 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.
  3. Az ablakot jobbra bővítsük, karaktereket hozzáadva, amíg mindegyik egyedi marad.
  4. 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.
  5. 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.