Анаграммы

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

Например. анаграммы («железнодорожная безопасность», «сказки») → Правда || анаграммы («ЖЕЛЕЗНОДОРОЖНАЯ БЕЗОПАСНОСТЬ», «сказки») → ИСТИНА

Итак, у нас есть наша функция. Нам нужно построить карту символов строки A и одну для строки B, после чего мы сравним их вместе.

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

function buildCharMap(str) {
}

Внутри здесь мы создадим пустой объект, который будет нашей картой символов, затем мы пройдемся по нашей строке и для каждого символа внутри мы добавим его в нашу charMap.

function buildCharMap(str) {
  const charMap = {}
}

Затем мы добавим цикл for вот так…

здесь мы выполняем логику замены и нижнего регистра в цикле for. Мы также используем регулярное выражение /[^\w]/g для удаления пробелов и восклицательных знаков из строки и замены ее пустой строкой “”. Теперь, когда все подчищено, мы меняем его на нижний регистр .toLowerCase().

Затем мы берем нашу charMap, назначаем ей ключ, а затем увеличиваем значение этого символа. Затем не забудьте вернуть charMap.

Теперь мы можем использовать этот помощник для построения карты символов для строки a и строки b.

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

Object.keys() извлекает ключи внутри объекта, и мы используем это для сравнения каждой строки. .length с указанием количества ключей в каждом объекте.

Итак, мы берем количество ключей в aCharMap и сравниваем их с bCharMap.

Если они не совпадают, то у нас нет анаграммы, поэтому мы хотим вернуть false. Если они имеют одинаковые символы, мы можем продолжить. Итак, мы перебираем символы aCharMap, и если они не равны символам bCharMap, то возвращаем false, потому что у нас нет анаграммы.

Наконец, если мы преуспеем в обеих этих проверках, у нас должна быть анаграмма, поэтому мы просто вернем true.

Итак, вот наше полное решение.