Move History

Rooted by: Anagram
Fork Selected
  • Code
    const isAnagram = (s1, s2) => s1.length === s2.length && Object.values([...s1].reduce((o, k, i) => (k in o ? ++o[k] : o[k] = 1, s2[i] in o ? --o[s2[i]] : o[s2[i]] = -1, o), {})).every(v => !v);
    Test Cases
    const chai = require("chai");
    const assert = chai.assert;
    const Test = require("@codewars/test-compat");
    
    
    describe('isAnagram', () => {
      it('should return true for anagrams', () => {
        assert.strictEqual(isAnagram('listen', 'silent'), true);
        assert.strictEqual(isAnagram('race', 'care'), true);
      });
    
      it('should return false for non-anagrams', () => {
        assert.strictEqual(isAnagram('night', 'things'), false);
        assert.strictEqual(isAnagram('hello', 'world'), false);
      });
    
      it('should return false if input strings have different lengths', () => {
        assert.strictEqual(isAnagram('abc', 'abcd'), false);
        assert.strictEqual(isAnagram('abcd', 'abc'), false);
        assert.strictEqual(isAnagram('anagram', 'nag a ram'), false);
      });
    });
  • Code
    • function isAnagram(str1, str2) {
    • if (str1.length !== str2.length) {
    • return false;
    • }
    • const frequency = {};
    • for (let i = 0; i < str1.length; i++) {
    • const char = str1[i];
    • if (frequency[char]) {
    • frequency[char]++;
    • } else {
    • frequency[char] = 1;
    • }
    • }
    • for (let i = 0; i < str2.length; i++) {
    • const char = str2[i];
    • if (!frequency[char]) {
    • return false;
    • } else {
    • frequency[char]--;
    • }
    • }
    • return true;
    • }
    • const isAnagram = (s1, s2) => s1.length === s2.length && Object.values([...s1].reduce((o, k, i) => (k in o ? ++o[k] : o[k] = 1, s2[i] in o ? --o[s2[i]] : o[s2[i]] = -1, o), {})).every(v => !v);