Проверьте, является ли строка изограммой с помощью Javascript — логического обзора

#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 () = = = логическая логика!