Intern
/* Se da una cadena de caracteres. Encontrar la cantidad de pares de índices i y j (i <= j), entre los cuales no hay caracteres repetidos. Para la cadena "aba" la respuesta es 5: pueden ser ASCII [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
sobes.tech AI
Respuesta de la IA
Para resolver el problema, es necesario recorrer todas las subcadenas de la cadena y verificar que en cada subcadena no haya caracteres repetidos. Para hacerlo de manera eficiente, se puede usar una ventana deslizante con dos punteros y un conjunto para rastrear los caracteres únicos.
Ejemplo en 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
}
// Ejemplo de uso:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // Imprime 5
Idea: extendemos el puntero derecho j mientras los caracteres sean únicos, luego desplazamos el puntero izquierdo i, eliminando los caracteres del conjunto. La cantidad de subcadenas únicas que comienzan con i es igual a j - i.