_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
Postar um comentário