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