función para determinar si es posible hacer que la primera entrada sea igual a la segunda entrada ya sea usando mayúsculas o eliminando letras. No se pueden intercambiar las posiciones de las letras.
const canReplace = (str1, str2) => { const letters1 = str1.split('') const letters2 = str2.split('') let lastIdx = -1 for (let l2 of letters2) { const idx = letters1.findIndex(l1 => l2 === l1 || l2.toLowerCase() === l1) if (idx > lastIdx) { lastIdx = idx } else { return false } } return lastIdx !== -1 } console.log(canReplace('abCde', 'BCD')) console.log(canReplace('Abcdef', 'ACE')) console.log(canReplace('ABCD', 'CBD')) console.log(canReplace('ABC', 'AbC'))La idea es tomar una letra a la vez de la cadena derecha e intentar "tachar" algunas letras de la cadena izquierda según ciertas reglas. Para cada letra de la cadena de la derecha, debe poder tachar al menos una letra de la cadena de la izquierda; de lo contrario, la verificación falla.
function check(left, right) { const chars = right.split(''); for (const c of chars) { let i = left.indexOf(c); if (i == -1) i = left.indexOf(c.toLowerCase()); if (i == -1) return false; left = left.slice(i + 1); } return true; }