Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

133
Vistas
Desafío de algoritmo: búsqueda difusa

Recientemente participé en un desafío de algoritmos para crear una búsqueda difusa con los siguientes criterios:

Dada una matriz establecida, cree una función que reciba un argumento y devuelva una nueva matriz que contenga solo los valores que comienzan con:

A) El argumento proporcionado B) El argumento proporcionado pero con 1 diferencia (es decir, 1 letra incorrecta)

La matriz era: frutas = [manzana, albaricoque, plátano, pera, mango, cereza, tomate]

asi que:

  • fuzzySearch('ap') = ['manzana, albaricoque']
  • fuzzySearch('app') = ['manzana', 'albaricoque']
  • fuzzySearch('aplicación') = ['manzana']
  • fuzzySearch('pa') = ['plátano', 'mango']

Esta es la solución que se me ocurrió:

 const fruits = ['apple', 'apricot', 'banana', 'pear', 'mango', 'cherry', 'tomato'] function fuzzySearch(str) { return fruits.filter(fruit => { let letterCount = 0 const fruitLetArr = fruit.toLowerCase().split('') const strArr = str.toLowerCase().split('') for (var i = 0; i < strArr.length; i++) { console.log(fruitLetArr[i], strArr[i], i, letterCount) if (fruitLetArr[i] !== strArr[i]) letterCount++ if (letterCount === 2) break; } if (letterCount < 2) return true }); } fuzzySearch(str)

¿Alguien puede pensar en una forma más rápida que no implique iterar sobre cada valor antes de que se pueda encontrar una solución?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Aquí hay algo que debería ser un poco más eficiente. También más fácil de leer. En esta solución, asumo que por "diferencia" te refieres a la sustitución de una letra por otra letra, en lugar de la adición de otra letra.

 const fruits = ['apple', 'apricot', 'banana', 'pear', 'mango', 'cherry', 'tomato']; const fuzzySearch = (str) => { return fruits.filter((fruit) => { // If our first case is met, immediately return if (fruit.startsWith(str)) return true; // Split the fruit based on the length of input string const test = fruit.slice(0, str.length).split(''); let diffs = 0; // Compare + keep track of differences between input + sliced fruit test.forEach((letter, i) => letter !== str[i] && diffs++); // If we have more than one difference, it doesn't meet case #2 if (diffs > 1) return false; return true; }); }; const testCases = ['ap', 'app', 'appl', 'pan', 'bp']; for (const testCase of testCases) { console.log(fuzzySearch(testCase)); }

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda