Intern
/* É uma string de caracteres dada. Encontrar o número de pares de índices i e j (i <= j), entre os quais não há caracteres repetidos. Para a string "aba", a resposta é 5: podem ser ASCII [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
sobes.tech IA
Resposta da IA
Para resolver o problema, é necessário percorrer todas as subcadeias da cadeia e verificar se em cada subcadeia não há caracteres repetidos. Para fazer isso de forma eficiente, pode-se usar uma janela deslizante com dois ponteiros e um conjunto para rastrear os caracteres únicos.
Exemplo em 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
}
// Exemplo de uso:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // Vai imprimir 5
Ideia: expandimos o ponteiro direito j enquanto os caracteres forem únicos, depois movemos o ponteiro esquerdo i, removendo os caracteres do conjunto. A quantidade de substrings únicas que começam com i é igual a j - i.