Помогите с задачей на js,не понимаю почему не правильный код
Изограмма – это слово, в котором нет повторяющихся букв, последовательных или непоследовательных. Реализуйте функцию, которая определяет, является ли строка, содержащая только буквы, изограммой. Предположим, что пустая строка является изограммой. Игнорировать регистр букв.
мое решение:
function isIsogram(str){
let flag = true //Допускаю что слово изначально изограмма
for (let i =0;i<str.length;i++) { //делаю цикл
if (str.includes(str[i])===true ) { //Проверяю каждый символ в строке на совпадение ,если символ совпал, то меня флаг на false и сразу заканчиваю цикл
flag = false
break
}
}
console.log(flag) //тут получается false хотя должно быть true
return flag
}
isIsogram('Dermatoglyphics')// здесь нет повторяющихся символов
Твоя программа работает так:
Проверяемое слово 'abc'
Слово 'abc' содержит букву 'a'?
Да!
Слово является изограммой.
Завершение программы.
Цикл всегда завершается при первой итерации, так как ты методу includes скармливаешь свою же строку. Звучит логично?
Потому что проверять строку на наличие символа, взятого из этой же самой строки - это глупость, символ этот в любом будет присутствовать и условие всегда будет выполняться.
Проблема в том, что метод includes() проверяет наличие символа в строке, но он не игнорирует регистр. Можно использовать метод toLowerCase() для приведения всех символов в строке к нижнему регистру перед выполнением проверки.
Попробуй так:
function isIsogram(str){
let flag = true; // Предположим, что слово изначально изограмма
str = str.toLowerCase(); // Приводим все символы к нижнему регистру
for (let i = 0; i < str.length; i++) { // Делаем цикл
if (str.indexOf(str[i]) !== i) { // Проверяем, есть ли текущий символ в строке до текущей позиции
flag = false;
break;
}
}
console.log(flag);
return flag;
}
isIsogram('Dermatoglyphics'); // Вернет true, так как нет повторяющихся символов
незнаю