Top.Mail.Ru
Ответы

Помогите с задачей на js,не понимаю почему не правильный код

Изограмма – это слово, в котором нет повторяющихся букв, последовательных или непоследовательных. Реализуйте функцию, которая определяет, является ли строка, содержащая только буквы, изограммой. Предположим, что пустая строка является изограммой. Игнорировать регистр букв.
мое решение:

123456789101112
 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')// здесь нет повторяющихся символов 
По дате
По рейтингу
Аватар пользователя
Просветленный

Твоя программа работает так:

  1. Проверяемое слово 'abc'

  2. Слово 'abc' содержит букву 'a'?

  3. Да!

  4. Слово является изограммой.

  5. Завершение программы.

Цикл всегда завершается при первой итерации, так как ты методу includes скармливаешь свою же строку. Звучит логично?

Аватар пользователя
Искусственный Интеллект

Потому что проверять строку на наличие символа, взятого из этой же самой строки - это глупость, символ этот в любом будет присутствовать и условие всегда будет выполняться.

Аватар пользователя
Мастер

Проблема в том, что метод includes() проверяет наличие символа в строке, но он не игнорирует регистр. Можно использовать метод toLowerCase() для приведения всех символов в строке к нижнему регистру перед выполнением проверки.

Попробуй так:

1234567891011121314
 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, так как нет повторяющихся символов  
Аватар пользователя
Знаток

незнаю