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