JS: Напишите функцию, которая будет возвращать количество различных буквенных символов без учета регистра и числовых цифр, которые встречаются более одного раза - PullRequest
0 голосов
/ 11 апреля 2019

У меня следующая проблема: Подсчет количества дубликатов

Напишите функцию, которая будет возвращать количество различных буквенных символов без учета регистра и числовых цифр, которые встречаются более одного раза во входной строке. Можно предположить, что входная строка содержит только буквенно-цифровые символы, включая цифры, прописные и строчные буквы.

Пример

  • "abcde" -> 0 (# символов не повторяется более одного раза)
  • "aabbcde" -> 2 (# 'a' и 'b')
  • "aabbcdeB" -> 2 (# 'a' и 'b')
  • "неделимость" -> (1 # 'i')
  • "Неделимость" -> 2 (# 'i' и 's')
  • "aa11" -> 2 (# 'a' и '1')

У меня есть код ниже, который, кажется, работает, но я не совсем понимаю:

function countDuplicates(str) {
    var myObj = {},
        counter = 0;    
    for(var i = 0; i < str.length; i++){   

      if(!myObj[str[i]]){
          myObj[str[i]] = 1;
      } 
      else if(myObj[str[i]] < 2) {
          myObj[str[i]]+=1;
          counter++;
      }    
    }
    return counter;
}

Можно ли было бы проходить построчно и быстро объяснять, что делает код?

1 Ответ

0 голосов
/ 11 апреля 2019
  1. Этот код проходит все символы в строке
  2. Вы создаете пустой объект myObj
  3. Добавление свойства к myObj с тем же именемв качестве значения текущего проверяемого символа, т.е. myObj[str[i]], вы можете разложить его на:
    str[i] равно g, поэтому у вас будет myObject['g']
    , а затем присвойте число 1 myObject['g']Ваш объект теперь выглядит следующим образом:

    myObj: {g: 1}

  4. Проверка следующего символа строки, теперь характер, например, c, так что вывыполняя ту же операцию, что и в п.3, теперь ваш объект выглядит следующим образом:

    myObj: {g: 1, c: 1}

  5. Но что произойдет, если выуже добавлен символ к myObj, это проверяет if(!myObj[str[i]]){...}, так что здесь происходит то, что мы проверяем, добавлен ли проверенный в данный момент charaker в объект.Если не добавлено, добавьте его со значением 1, как в пт.3
    *, 1034 * совпадает с myObj['c'] === undefined (если не определено, добавьте его к объекту)

    Но если это ужедобавлено, что мы проверяем, является ли значение свойства объекта меньше 2 (мы хотим увеличить счетчик только один раз для указанного символа), если да, мы увеличиваем counter (да, мы нашли дубликат)

  6. Счетчик возврата

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...