Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode 23: Mesclando K Listas Ordenadas com Harbour/xBase e Reutilização de Código

_Créditos das imagens: ChatGPT **Título:** LeetCode 23: Mesclando K Listas Ordenadas com Harbour/xBase e Reutilização de Código **Introdução** Olá, entusiastas de Harbour/xBase e desafios de programação! Depois de explorarmos como mesclar duas listas ordenadas no [nosso post sobre o LeetCode 21](https://www.blacktdn.com.br/2025/03/blacktdn-leetcode-21-merge-two-sorted.html), vamos dar um passo adiante e enfrentar um problema um pouco mais complexo: o LeetCode 23 - Merge K Sorted Lists. Neste artigo, vamos desvendar uma implementação em Harbour/xBase para este desafio, demonstrando como podemos inteligentemente reutilizar a solução que já construímos para o problema 21. Veremos como a modularidade e a construção sobre soluções anteriores podem simplificar problemas mais complexos. **O Problema: LeetCode 23 - Merge K Sorted Lists** O desafio é o seguinte: dado um array (`aLists` em nossa implementação) contendo `k` listas encadeadas, onde cada lista já está ordenada em ordem cres...

BlackTDN :: LeetCode :: Análise e Resolução do Desafio: Longest Substring Without Repeating Characters



_Créditos das imagens: ChatGPT_

### LeetCode :: Análise e Resolução do Desafio: Longest Substring Without Repeating Characters

O desafio proposto é bastante conhecido no **LeetCode**, listado como [3. Longest Substring Without Repeating Characters](https://leetcode.com/problems/longest-substring-without-repeating-characters/). Ele exige encontrar o comprimento da maior substring sem caracteres repetidos de uma string dada. A solução apresentada utiliza a linguagem **Harbour**, que, com sua base estruturada, demonstra como problemas modernos podem ser resolvidos com linguagens clássicas de programação.

---

#### Descrição do Código Disponível

O código apresentado no repositório GitHub pode ser acessado diretamente nos seguintes links:  

👉[Longest Substring Without Repeating Characters :: Harbour](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/003/longest_substring_without_repeating_characters.3.prg).  
👉[Longest Substring Without Repeating Characters :: TLPP](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/003/longest_substring_without_repeating_characters.3.tlpp).  
A implementação faz uso de uma **abordagem de janela deslizante**, que é uma técnica eficiente para resolver problemas que envolvem substrings ou subsequências. --- #### Explicação do Algoritmo 1. **Entrada e Saída** - A função principal recebe uma string e retorna o comprimento da maior substring sem caracteres repetidos. - Além disso, é possível recuperar a própria substring encontrada, utilizando um parâmetro passado por referência. 2. **Estratégia Utilizada** - A abordagem de janela deslizante mantém dois ponteiros (`nStart` e `nEnd`) para delimitar a janela atual na string. - Um vetor (`aSet`) é utilizado como um "conjunto" para rastrear os caracteres únicos da janela. 3. **Fluxo da Solução** - Conforme o ponteiro `nEnd` avança pela string: - Caracteres repetidos dentro da janela são removidos, ajustando o ponteiro `nStart`. - O comprimento máximo da janela é atualizado quando uma janela válida (sem repetições) é encontrada. - A substring correspondente ao comprimento máximo é armazenada para ser retornada. 4. **Complexidade** - **Tempo:** \(O(n)\) — Cada caractere é processado no máximo duas vezes. - **Espaço:** \(O(k)\) — Onde \(k\) é o número de caracteres únicos possíveis (limitado no caso de strings ASCII). --- #### Diferenças e Similaridades com Soluções Populares A solução apresentada em Harbour segue os mesmos princípios de algoritmos escritos em linguagens mais populares, como Python ou Java, demonstrando como conceitos de algoritmos eficientes podem ser implementados independentemente da linguagem. Por exemplo, em Python: ```python def lengthOfLongestSubstring(s): char_set = set() l = 0 res = 0 for r in range(len(s)): while s[r] in char_set: char_set.remove(s[l]) l += 1 char_set.add(s[r]) res = max(res, r - l + 1) return res ``` A principal diferença é que a versão Harbour usa vetores e funções nativas (`AScan`, `AAdd`, `ADel`) para emular a funcionalidade de um conjunto. --- #### Pontos Relevantes 1. **Clareza do Código** O código está bem estruturado e demonstra claramente a lógica por trás do algoritmo. A utilização de variáveis descritivas facilita o entendimento. 2. **Utilização de Funções Nativas do Harbour** A implementação faz uso extensivo de funções como `SUBSTR`, `AScan`, `AAdd`, `ADel`, e `Max`, mostrando como adaptar uma lógica moderna em uma linguagem clássica. 3. **Foco em Educação e Compartilhamento** Disponibilizar a solução em um repositório GitHub ([naldodj-xbase-leetcode-solutions](https://github.com/naldodj/naldodj-xbase-leetcode-solutions)) reflete o esforço em compartilhar conhecimento e encorajar outros desenvolvedores a explorarem desafios do LeetCode em Harbour. --- #### Conclusão A solução não apenas resolve o problema eficientemente, mas também demonstra o potencial de linguagens como Harbour para enfrentar desafios modernos de programação. Essa abordagem é uma excelente maneira de aprender e explorar algoritmos clássicos em diferentes linguagens. --- #### Hashtags #LeetCodeSolutions #HarbourLanguage #AlgorithmDesign #WindowSlidingTechnique #CodingChallenges #OpenSourceProjects #ProgrammingEducation #SubstringProblem #EfficientAlgorithms #CodeSharing

Comentários

Postagens mais visitadas