@Alex_87

Как посчитать уникальные символы в строке?

Добрый вечер! Подскажите пожалуйста, что не так в коде? Имеется задача:
const text2 = 'You know nothing Jon Snow';

function countUniqChars(str){
 
 let box = str[0];
 let count = 0;

  for(let i = 0; i < str.length; i += 1){  
       for(let j = 0; j < box.length; j += 1 ){ 
      
        if(box[j] != str[i]){ 
        box += str[i];
        console.log(box);
        count += 1; 
        
         }
      }      
    }  
  return count; 
}
console.log(countUniqChars(text2));

Моя логика решения этой задачи звучит следующем образом:
1) Пишем 1 цикл по входящей строке(str) и внутри него пишем другой цикл по новой строчке(box). Берём символ с входящей строки и мы должны пройтись им по каждому символу новой строки. Если такого же в новой строке нет, то тогда мы его заносим в переменную box и считаем с помощью отдельной переменной(count). Когда мы одним символом полностью прошлись по элементам новой строки(то есть заканчиваем внутренний цикл), мы берём у входящей строки следующий символ и повторяем данную операцию. Важно!!! Задание необходимо выполнить без использования сторонних библиотек.
  • Вопрос задан
  • 3119 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const countUniqueChars = str =>
  new Set(str).size;

или

const countUniqueChars = str => [...str]
  .reduce((acc, n) => (acc.includes(n) || acc.push(n), acc), [])
  .length;

или

const countUniqueChars = str => Array
  .from(str)
  .reduce((acc, n, i, a) => acc + (i === a.indexOf(n)), 0);

или

const countUniqueChars = str => Object
  .keys(Object.fromEntries([].map.call(str, n => [ n, 1 ])))
  .length;

или

const countUniqueChars = str => str
  .split('')
  .sort()
  .filter((n, i, a) => n !== a[i - 1])
  .length;

или

const countUniqueChars = str =>
  (str && str.match(/(.)(?!.*\1)/g)).length;
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Что не так:
  1. цикл в цикле – лучше обойтись одним, если можно. Поиск можно заменить на indexOf()
  2. в качестве накопителя уникальных строка как-то нетрадиционна. Обычно массив, или ключи объекта. Или, изысканно, Set – и потом будет интересовать его длина (размер, size, кардинальность : )

const text2 = 'You know nothing Jon Snow';

function countUniqChars(str) {
  return new Set(str.split('')).size;
}

countUniqChars(text2) // 13
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы