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:
- Utilizar dos punteros —
leftyright, que definen los límites de la ventana. - Usar una estructura de datos (por ejemplo, un mapa o un array) para rastrear los caracteres encontrados y su cantidad.
- Expandir la ventana hacia la derecha, añadiendo caracteres, mientras todos sean únicos.
- 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.
- 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.