Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

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