Sobes.tech
Senior

Describe el algoritmo para contar substrings con todos los caracteres únicos

sobes.tech AI

Respuesta de la IA

Para contar la cantidad de subcadenas con caracteres únicos, generalmente se utiliza el algoritmo de "ventana deslizante" (sliding window). La idea es mantener una ventana en la que todos los caracteres sean únicos y moverla a lo largo de la cadena, contando la cantidad de tales subcadenas.

Pasos principales:

  1. Utilizar dos punteros — left y right, que definen los límites de la ventana.
  2. Usar una estructura de datos (por ejemplo, un mapa o un array) para rastrear los caracteres encontrados y su cantidad.
  3. Expandir la ventana hacia la derecha, añadiendo caracteres, mientras todos sean únicos.
  4. Si aparece un carácter repetido, mover el puntero izquierdo hacia la derecha, disminuyendo los contadores de los caracteres, hasta que la repetición desaparezca.
  5. En cada paso, se puede contar la cantidad de subcadenas únicas, por ejemplo, sumando right - left + 1.

Ejemplo en Go:

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
}

Aquí, count representa el número total de subcadenas con caracteres únicos.