Quiero crear una función para comparar dos cadenas y devolver cambios en la cadena (como Stack Overflow muestra cambios en la respuesta que se editó).
Los resultados esperados deben ser.
console.log(detectChange("SHANTI DEVI","SHANT DEVI")); // SHANT_I_ DEVI console.log(detectChange("MOHAN SINGH","MOHAN SINGH")); // MOHAN SINGH console.log(detectChange("SURESH SINGH","MOHAN SINGH")); // -MOHAN-_SURESH_ SINGH console.log(detectChange("SEETA DEVI","SITA SINGH")); // SI-_EE_TA -SINGH-_DEVI_El siguiente código no tuvo éxito para mí.
function detectChange(name1, name2) { name1 = name1.split(""); name2 = name2.split(""); var visit = 0; var final_name = []; if (name2.length > name1.length) { nameTmp = name1; name1 = name2; name2 = nameTmp; } for (i = 0; i <= name1.length; i++) { if (name1[i] == name2[visit]) { final_name.push(name1[i]); visit++; } else if (name1[i] !== null) { final_name.push("_" + name1[i] + "_"); visit++; } } return final_name.join(""); } // Getting unexpected results console.log(detectChange("SHANTI DEVI", "SHANT DEVI")); // SHANT_I__ __D__E__V__I_ console.log(detectChange("MOHAN SINGH", "MOHAN SINGH")); // MOHAN SINGH console.log(detectChange("SURESH SINGH", "MOHAN SINGH")); // _S__U__R__E__S__H__ __S__I__N__G__H_ console.log(detectChange("SEETA DEVI", "SITA SINGH")); // S_E__E__T__A__ __D__E__V__I_Aquí todos los resultados no son válidos, ayúdenme con esto, ¿cómo puedo manejar esto?
Probablemente desee leer este documento, " Un algoritmo de diferencia O(ND) y sus variaciones ". Aquí está el resumen:
Resumen Hace tiempo que se sabe que los problemas de encontrar una subsecuencia común más larga de dos secuencias A y B y un guión de edición más corto para transformar A en B son problemas duales. En este documento, se muestra que son equivalentes a encontrar una ruta más corta/más larga en un gráfico de edición. Usando esta perspectiva, se desarrolla un algoritmo simple de tiempo y espacio O(ND) donde N es la suma de las longitudes de A y B y D es el tamaño del script de edición mínimo para A y B. El algoritmo funciona bien cuando las diferencias son pequeño (las secuencias son similares) y, en consecuencia, es rápido en aplicaciones típicas. Se muestra que el algoritmo tiene un rendimiento de tiempo esperado O(N + D 2 ) bajo un modelo estocástico básico. Un refinamiento del algoritmo requiere solo espacio O(N), y el uso de árboles de sufijos conduce a una variación de tiempo O(NlgN + D 2 ).
Y luego implementar el algoritmo.
Pero no... en realidad no quieres hacer eso, porque ya se ha hecho por ti: consulta el paquete npm diff .