JSFiddle - React, Tailwind, and code Playground

by Kaeden

JavaScript

var isSubAnagram = function(s, t) {
    
    if (s.length < t.length) {
        return false;
    };
    
    if (s.length == 0) {
        return true;
    }
    
    var sChars = s.split("");
    
    var subStr = sChars.splice(0, t.length - 1).join("");
    
    for (var i = t.length - 1; i < sChars.length; i++) {
        subStr += sChars.shift();
        if (isAnagram(subStr, t)) {
            return true;
        }
        if (subStr.length) {
            subStr = subStr.substr(1, subStr.length);
        }
    }
    
    return false;
};

var isAnagram = function(s, t) {
    if (s.length != t.length) {
        return false;
    }
    
    var tCounts = {};
    var sCounts = {};
    
    var tChars = t.split("");
    var sChars = s.split("");
    
    for (var i = 0; i < tChars.length; i++) {
        var tChar = tChars[i];
        tCounts[tChar] = tCounts[tChar] == null ? 1 : tCounts[tChar] + 1;
        
        var sChar = sChars[i];
        sCounts[sChar] = sCounts[sChar] == null ? 1 : sCounts[sChar] + 1;
    }
    
    if (Object.keys(tCounts).length != Object.keys(sCounts).length) {
        return false;
    }
    
    for (var key in tCounts) {
        var tCount = tCounts[key];
        var sCount = sCounts[key];
        if (tCount != sCount) {
            return false;
        }
    }
    
    return true;
};

var test = function(s, t, expected) {
    var actual = isAnagram(s, t);
    
    var result = expected == actual ? "SUCCESS": "FAILURE";
    
    console.log(s + " is an anagram of " + t + "? " + result); 
};

// alert(isSubAnagram("racecar", "eacc"));

test("car", "rac", true);
test("terran", "ranter", true);
test("cara", "rac", false);
test("capr", "rdac", false);
test("apple", "pelpa", true);
test("razor", "zrora", true);