Intern
/* eine Zeichenkette wird gegeben. Finde die Anzahl der Indexpaare i und j (i <= j), zwischen denen keine wiederholten Zeichen sind. Für die Zeichenkette "aba" ist die Antwort 5: können ASCII sein [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
sobes.tech KI
Antwort von AI
Um das Lösungen für das Problem besteht darin, alle Teilstrings der Zeichenkette zu durchlaufen und zu überprüfen, ob in jedem Teilstring keine wiederholten Zeichen vorhanden sind. Um dies effizient zu tun, kann man ein gleitendes Fenster mit zwei Zeigern und eine Menge verwenden, um die einzigartigen Zeichen zu verfolgen.
Beispiel in 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
}
// Beispiel für die Verwendung:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // Gibt 5 aus
Idee: Wir erweitern den rechten Zeiger j, solange die Zeichen eindeutig sind, verschieben dann den linken Zeiger i und entfernen die Zeichen aus der Menge. Die Anzahl der einzigartigen Teilstrings, die mit i beginnen, ist gleich j - i.