Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Leetcode :: Resolvendo o Desafio "Longest Common Prefix" usando Harbour e TLPP

_Créditos das imagens: ChatGPT_ ### Leetcode :: Resolvendo o Desafio "Longest Common Prefix" usando Harbour e TLPP O problema [**"Longest Common Prefix"**](https://leetcode.com/problems/longest-common-prefix/description/), do Leetcode, consiste em encontrar o maior prefixo comum entre um array de strings. Se não houver prefixo comum, o resultado deve ser uma string vazia. Neste artigo, apresento as técnicas utilizadas para resolver o desafio nas linguagens **Harbour** e **TLPP**, com links para os códigos-fonte e uma explicação detalhada. --- #### Descrição do Problema Dado um array de strings, encontrar o maior prefixo comum entre todas as strings do array. **Exemplo de Entrada e Saída:** | Input |-Output-|-Expected-|-Matched-| |:----------------------------------------------------|:------:|:--------:|:-------:| | `["flower","flow","flight"]` | `fl` | `fl` ...

BlackTDN :: LeetCode :: Regular Expression Matching :: Harbour & TLPP

_Créditos das imagens: ChatGPT_

# LeetCode :: Regular Expression Matching

O desafio "Regular Expression Matching" do [LeetCode](https://leetcode.com/problems/regular-expression-matching/description/) é conhecido por exigir criatividade e eficiência. Quatro soluções foram desenvolvidas em Harbour e TLPP para atender à demanda. Aqui exploraremos essas implementações destacando suas abordagens e técnicas.

---

## Soluções Harbour

### Utilizando Recursividade

1. **[Solução 10.1](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/010/regular.expression.matching.10.1.prg)**
   Esta implementação, baseada na original (isMatchRec)[https://www.geeksforgeeks.org/implementing-regular-expression-matching/], utiliza a recusividade para solucionar o problema.
   Foram necessárias algumas adaptações pois em C++ tanto o array/vetor quanto uma string de caracteres se iniciam na posição 0, já no xBase, ambos iniciam-se em 1.
   Implementamos a função: simplePatternMatch para validar as seguintes regras:
       s contains only lowercase English letters.
       p contains only lowercase English letters, '.', and '*'.

2. **[Solução 10.2](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/010/regular.expression.matching.10.2.prg)**
   Também baseada na original (isMatchRec)[https://www.geeksforgeeks.org/implementing-regular-expression-matching/]
   Utiliza as funções de tratamento de regex nativas da linguagem para validar as seguintes regras:
       s contains only lowercase English letters.
       p contains only lowercase English letters, '.', and '*'.   
   
   Obs.: A recursão é eficiente em termos de codificação, mas pode consumir mais memória em strings longas.

### Utilizando Programação Dinâmica

3. **[Solução 10.3](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/010/regular.expression.matching.10.3.prg)**
   Apresenta uma abordagem baseada em programção dinâmica, utilizando vetores para armazenar resultados intermediários. Isso reduz significativamente a complexidade computacional, tornando-a ideal para casos onde a recursão simples não é viável devido à profundidade das chamadas.

4. **[Solução 10.4](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/010/regular.expression.matching.10.4.prg)**
   Uma versão otimizada da solução anterior, com foco na redução do uso de espaço sem o uso de arrays/vetores adicionais mantendo a eficiência. Esta solução é ideal para sistemas com recursos limitados.

---

## Soluções TLPP

As implementações em TLPP seguem os mesmos princípios das soluções Harbour, com adaptações específicas para a linguagem. Veja os links:

- [Solução 10.1](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/010/regular.expression.matching.10.1.tlpp)
- [Solução 10.2](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/010/regular.expression.matching.10.2.tlpp)
- [Solução 10.3](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/010/regular.expression.matching.10.3.tlpp)
- [Solução 10.4](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/010/regular.expression.matching.10.4.tlpp)

---

## Conclusão

As soluções destacadas oferecem uma evolução no tratamento de correspondência de expressões regulares. Desde abordagens simples e diretas até técnicas otimizadas de programção dinâmica, estas implementações mostram como o problema pode ser abordado de múltiplas maneiras para atender a diferentes cenários e restrições.

## Links relevantes

- [Versão Harbour](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/tree/main/src/hb/010)
- [Versão TLPP](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/tree/main/src/tlpp/010)

---

## Hashtags

#LeetCode #RegexMatching #Harbour #TLPP #ProgramacaoDinamica #Algoritmos #DesafiosDeCodigo #Protheus #Tecnologia

Comentários

Postagens mais visitadas