DEV Community

NJOKU SAMSON EBERE
NJOKU SAMSON EBERE

Posted on • Edited on

5 2

Algorithm 101: 3 Ways to Check If Two Words are Anagrams

An anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once - Wikipedia.

Programmatically, can you do this?


wordAnagrams("silent", "listen"); // true

wordAnagrams("samson", "ebere"); // "unequal word lengths"

wordAnagrams("njoku", "ebere"); // false

Enter fullscreen mode Exit fullscreen mode

We want to explore three (3) ways we can achieve this. We will be focusing on word anagrams only. In the future, we will look into sentence anagrams. The major objective is that both words should contain exactly the same amount of letters and these letters should re-occur the same amount of times in each word.

Prerequisite

To benefit from this article, you need to have basic understanding of javascript's string, object and array methods.

Let's do this using:

  • sort(), length, toLowerCase(), if...statement, join()
      function wordAnagrams(wordA, wordB) {
        let newWordA = wordA.toLowerCase();
        let newWordB = wordB.toLowerCase();

        if (newWordA.length === newWordB.length) {
          return (
            [...newWordA].sort().join("") === [...newWordB].sort().join("")
          );
        }

        return "unequal word lengths";
      }
Enter fullscreen mode Exit fullscreen mode
  • sort(), length, hasOwnProperty(), JSON.stringify(), toLowerCase(), if...statement, for...of...loop
      function wordAnagrams(wordA, wordB) {
        let newWordA = wordA.toLowerCase();
        let newWordB = wordB.toLowerCase();

        function createWordObject(word) {
          let wordObject = {};
          for (char of [...word].sort()) {
            if (wordObject.hasOwnProperty(char)) {
              wordObject[char]++;
            } else {
              wordObject[char] = 1;
            }
          }
          return wordObject;
        }

        if (newWordA.length === newWordB.length) {
          wordAObject = createWordObject(newWordA);
          wordBObject = createWordObject(newWordB);

          return JSON.stringify(wordAObject) === JSON.stringify(wordBObject);
        }
        return "unequal word lengths";
      }
Enter fullscreen mode Exit fullscreen mode
  • sort(), length, hasOwnProperty(), toLowerCase(), Object.keys(), Object.values(), push(), .every(), if...statement, for...loop, for...of...loop
      function wordAnagrams(wordA, wordB) {
        let newWordA = wordA.toLowerCase();
        let newWordB = wordB.toLowerCase();
        let result = [];

        function createWordObject(word) {
          let wordObject = {};
          for (char of [...word].sort()) {
            if (wordObject.hasOwnProperty(char)) {
              wordObject[char]++;
            } else {
              wordObject[char] = 1;
            }
          }
          return wordObject;
        }

        if (newWordA.length === newWordB.length) {
          let wordAObject = createWordObject(newWordA);
          let wordBObject = createWordObject(newWordB);

          let wordAObjectKeys = Object.keys(wordAObject);
          let wordBObjectKeys = Object.keys(wordBObject);

          let wordAObjectValues = Object.values(wordAObject);
          let wordBObjectValues = Object.values(wordBObject);

          let wordObjectLength = wordAObjectKeys.length;

          // check if wordA Object is equivalent to wordB Object
          for (let i = 0; i <= wordObjectLength; i++) {
            let check =
              wordAObjectKeys[i] === wordBObjectKeys[i] &&
              wordAObjectValues[i] === wordBObjectValues[i];

            if (check) {
              result.push(true);
            } else {
              result.push(false);
            }
          }

          return result.every(currentValue => currentValue === true);
        }

        return "unequal word lengths";
      }
Enter fullscreen mode Exit fullscreen mode

Conclusion

There are many ways to solve problems programmatically. I will love to know other ways you solved yours in the comment section.

If you have questions, comments or suggestions, please drop them in the comment section.

Up Next: Algorithm 101: 3 Ways to Create Pig Latin

You can also follow and message me on social media platforms.

Twitter | LinkedIn | Github

Thank You For Your Time.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay