Longest Substring Without Repeating Characters
Percorra uma string em busca de trechos de caracteres consecutivos em que cada caractere aparece apenas uma vez. Em coddycode, o trecho ycode tem cinco caracteres diferentes, e nenhum trecho mais longo evita uma repetição, então a resposta é 5.
Verificar todos os trechos possíveis funciona, mas é lento. Um método mais rápido mantém uma janela entre duas posições que nunca contém repetições. Mova a borda direita um caractere de cada vez. Quando o novo caractere já estiver dentro da janela, mova a borda esquerda para logo depois da posição em que esse caractere foi visto antes. Lembrar a última posição de cada caractere torna esse salto instantâneo, então a string é percorrida apenas uma vez.
Escreva uma função chamada lengthOfLongestSubstring que recebe uma string s e retorna o comprimento da maior substring (uma sequência de caracteres consecutivos) na qual nenhum caractere aparece mais de uma vez.
Letras maiúsculas e minúsculas são caracteres diferentes, então a e A não são repetidos.
Restrições: 1 <= s.length <= 5 * 10^4. s contém apenas letras do alfabeto inglês (minúsculas e maiúsculas) e dígitos.
Função
- arg1string
- Retornainteger
Exemplos
- Entrada
- arg1 = "coddycode"
- Saída
- 5
- Entrada
- arg1 = "racecar"
- Saída
- 4
- Entrada
- arg1 = "a1b2a3b"
- Saída
- 5
+12 testes ocultos ao enviar
Dicas
Abra uma de cada vez. Cada uma revela um pouco mais.
Uma substring é uma parte contínua da string, então você está procurando o trecho mais longo que consegue percorrer sem encontrar o mesmo caractere duas vezes.
Mantenha uma janela com uma extremidade esquerda e uma extremidade direita. Aumente-a pela direita, um caractere de cada vez, e mova a extremidade esquerda somente quando o novo caractere já estiver dentro da janela.
Armazene o último índice em que cada caractere apareceu. Se o novo caractere foi visto pela última vez no limite esquerdo ou depois dele, mova o limite esquerdo para uma posição após esse índice. O limite esquerdo nunca volta para trás, e a resposta é a janela mais ampla que você já teve.
Em breve, uma explicação completa deste problema.
Problemas parecidos
Problemas que usam as mesmas ideias. Resolver dois ou três é o que fixa um padrão.
Python
def lengthOfLongestSubstring(s):
# Escreva o código aquiCaso 1
Caso 2
Caso 3
Entrada
arg1 = "coddycode"
Esperado
5