Mi intento de resolver si una cadena es un isograma está a continuación:
No puedo averiguar por qué mi código no funciona. Por favor, ¿alguien puede ayudar a explicar por qué?
Un isograma no tiene letras que se repitan consecutiva o no consecutivamente.
Intenté: 1- convertir la cadena a minúsculas y convertirla en una matriz. 2- cree un control if para devolver verdadero si la cadena está vacía. 3- ejecute un bucle for a través de la matriz y compare el primer índice y el último índice de cada letra. Si la primera instancia y la última instancia no son iguales, entonces la cadena no puede ser un isograma y, por lo tanto, devolver falso.
function isIsogram(str){ str = str.toLowerCase(); let text = str.split(""); if (text.length === 0) { return true; } for (let i = 0; i < text.length; i++) { if ( text.indexOf(text[i]) !== text.lastIndexOf(text[i]) ){ return false; } else { return true; } } }Un simple cambio debería resolver el problema. Su función existente solo considera el primer carácter. Esto luego omitirá cualquier carácter repetido más adelante en la cadena, por ejemplo, devuelve verdadero para 'abb', lo cual es incorrecto, por supuesto.
Es mejor continuar hasta el final del ciclo y solo devolver verdadero cuando estamos seguros de que no hay caracteres repetidos.
function isIsogram(str){ str = str.toLowerCase(); let text = str.split(""); if (text.length === 0) { return true; } for (let i = 0; i < text.length; i++) { if (text.indexOf(text[i]) !== text.lastIndexOf(text[i]) ){ return false; } } return true; } const testInputs = ['abb','aab','aba','abc','abcdz']; testInputs.forEach(input => console.log(`isIsogram(${input}): ${isIsogram(input)}`)); Aquí hay otra implementación, usando Set() para contar caracteres únicos. Si la cadena no tiene caracteres repetidos, entonces el número de caracteres únicos proporcionado por el tamaño establecido debe ser el mismo que la longitud de la cadena de entrada.
function isIsogram(str){ return new Set(str).size === str.length; } const testInputs = ['abb','aab','aba','abc', 'abcdz']; testInputs.forEach(input => console.log(`isIsogram(${input}): ${isIsogram(input)}`));