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

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

  • Конечно, первое, что вам нужно сделать, это объявить функцию.

  • Поскольку нам нужно сравнить два слова друг с другом, нам нужно передать два аргумента.

  • Частотомер будет объектом, поэтому нам нужно инициализировать пустой объект.

  • Мы хотим, чтобы эта функция возвращала «true», если два слова содержат одинаковые буквы, одинаковое количество раз (т. Е. Они являются анаграммами), или «false», если это не так. Если два слова не содержат одинакового количества букв, мы сразу же узнаем, что они не анаграммы, без необходимости делать что-либо еще. Мы можем сделать это с помощью простого оператора if.

  • Мы хотим перебрать каждую букву в первом слове. Мы можем сделать это разными способами. Я решил сделать это с помощью цикла for… of.

  • В этом цикле мы хотим построить наш частотомер. Я решил сделать это с помощью тернарного оператора. Первая треть тернарного оператора проверяет, есть ли у объекта счетчика какая-либо пара ключ-значение с ключом, равным символу в повторяемом слове. Если это так, он добавляет единицу к значению этого ключа. Если его еще нет, он добавляет ключ и устанавливает значение, равное 1.

На этом этапе, если мы напечатаем или console.log () объект счетчика, мы увидим вот что:

  • Затем мы хотим сделать что-то подобное для второго слова с парой небольших изменений. Опять же, тернарный оператор проверяет, существует ли уже буква в частотомере в качестве ключа. На этот раз, если буква найдена в объекте счетчика, мы хотим уменьшить счетчик на единицу. Если он не найден (то есть во втором слове есть буква, которой нет в первом слове), мы можем сразу вернуть false.

На этом этапе, если мы передали два слова, которые являются анаграммами друг друга, частотомер должен выглядеть примерно так:

  • Теперь нам просто нужно проверить наш частотомер, чтобы увидеть, являются ли наши слова анаграммами. Я решил сделать это с помощью цикла for… in ».

Для каждого ключа в объекте счетчика, если значение этого ключа не равно нулю - вернуть false.

Если мы зашли так далеко и не вернули false, то мы знаем, что два слова, которые мы передали, являются анаграммами, и можем вернуть true. Мы хотим сделать это вне любого цикла, в конец функции.

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

Аманда Трейтлер