Sobes.tech
Intern

/* Δίνεται μια συμβολοσειρά χαρακτήρων. Βρείτε τον αριθμό των ζευγών δεικτών i και j (i <= j), μεταξύ των οποίων δεν υπάρχουν επαναλαμβανόμενοι χαρακτήρες. Για τη συμβολοσειρά "aba" η απάντηση είναι 5: μπορούν να είναι ASCII [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */

sobes.tech AI

Απάντηση από AI

Για την επίλυση του προβλήματος, πρέπει να διασχίσουμε όλες τις υποαλυσίδες της συμβολοσειράς και να ελέγξουμε ότι σε κάθε υποαλυσίδα δεν υπάρχουν επαναλαμβανόμενα σύμβολα. Για να το κάνουμε αυτό αποτελεσματικά, μπορούμε να χρησιμοποιήσουμε ένα κινούμενο παράθυρο με δύο δείκτες και ένα σύνολο για την παρακολούθηση των μοναδικών συμβόλων.

Παράδειγμα σε Go:

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
}

// Παράδειγμα χρήσης:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // Θα εμφανίσει 5

Ιδέα: επεκτείνουμε τον δεξιό δείκτη j όσο τα σύμβολα είναι μοναδικά, στη συνέχεια μετακινούμε τον αριστερό δείκτη i, αφαιρώντας τα σύμβολα από το σύνολο. Ο αριθμός των μοναδικών υποαλυσίδων που ξεκινούν με i είναι ίσος με j - i.