#javascript #arrays #string #for-loop #indexof
Вопрос:
Моя попытка решить, является ли строка изограммой, приведена ниже:
я не могу понять, почему мой код не работает. Пожалуйста, кто-нибудь может помочь объяснить, почему?
В изограмме нет повторяющихся букв последовательно или не последовательно.
Я попытался: 1-преобразовать строку в нижний регистр и сделать ее массивом. 2 — создайте проверку if, чтобы вернуть значение true, если строка пуста. 3 — запустите цикл for по массиву и сравните первый и последний индексы каждой буквы. Если первый и последний экземпляры не совпадают, то строка не может быть изограммой и, следовательно, возвращать значение false.??
function isIsogram(str){ str = str.toLowerCase(); let text = str.split(""); if (text.length === 0) { return true; } for (let i = 0; i lt; text.length; i ) { if ( text.indexOf(text[i]) !== text.lastIndexOf(text[i]) ){ return false; } else { return true; } } }
Ответ №1:
Простое изменение должно решить проблему. Ваша существующая функция учитывает только первый символ. Затем это приведет к пропуску любых повторяющихся символов в строке, например, оно возвращает значение true для ‘abb’, что, конечно, неверно.
Лучше всего продолжить до конца цикла и возвращать значение true только тогда, когда мы уверены, что повторяющихся символов нет.
function isIsogram(str){ str = str.toLowerCase(); let text = str.split(""); if (text.length === 0) { return true; } for (let i = 0; i lt; 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 =gt; console.log(`isIsogram(${input}): ${isIsogram(input)}`));
Вот еще одна реализация, использующая a Set()
для подсчета уникальных символов. Если строка не содержит повторяющихся символов, то количество уникальных символов, задаваемых заданным размером, должно совпадать с длиной входной строки.
function isIsogram(str){ return new Set(str).size === str.length; } const testInputs = ['abb','aab','aba','abc', 'abcdz']; testInputs.forEach(input =gt; console.log(`isIsogram(${input}): ${isIsogram(input)}`));
Комментарии:
1. Спасибо за помощь! и мне нравится, насколько простым может быть ответ set () = = = логическая логика!