function same(arr1, arr2){
if(arr1.length !== arr2.length){
return false;
}
let frequencyCounter1 = {}
let frequencyCounter2 = {}
for(let val of arr1){
frequencyCounter1[val] = (frequencyCounter1[val] || 0) + 1
}
for(let val of arr2){
frequencyCounter2[val] = (frequencyCounter2[val] || 0) + 1
}
console.log(frequencyCounter1);
console.log(frequencyCounter2);
for(let key in frequencyCounter1){
if(!(key ** 2 in frequencyCounter2)){
return false
}
if(frequencyCounter2[key ** 2] !== frequencyCounter1[key]){
return false
}
}
return true
}
same([1,2,3,2,5], [9,1,4,4,11])
Anagrams
function validAnagram(first, second) {
if (first.length !== second.length) {
return false;
}
const lookup = {};
for (let i = 0; i < first.length; i++) {
let letter = first[i];
// if letter exists, increment, otherwise set to 1
lookup[letter] ? lookup[letter] += 1 : lookup[letter] = 1;
}
console.log(lookup)
for (let i = 0; i < second.length; i++) {
let letter = second[i];
// can't find letter or letter is zero then it's not an anagram
if (!lookup[letter]) {
return false;
} else {
lookup[letter] -= 1;
}
}
return true;
}
// {a: 0, n: 0, g: 0, r: 0, m: 0,s:1}
validAnagram('anagrams', 'nagaramm')
function sameFrequency(num1, num2){
let strNum1 = num1.toString();
let strNum2 = num2.toString();
if(strNum1.length !== strNum2.length) return false;
let countNum1 = {};
let countNum2 = {};
for(let i = 0; i < strNum1.length; i++){
countNum1[strNum1[i]] = (countNum1[strNum1[i]] || 0) + 1
}
for(let j = 0; j < strNum1.length; j++){
countNum2[strNum2[j]] = (countNum2[strNum2[j]] || 0) + 1
}
for(let key in countNum1){
if(countNum1[key] !== countNum2[key]) return false;
}
return true;
}
sameFrequency(182,281) //true
sameFrequency(18,281) //false
sameFrequency(3589578,5879385) //true
sameFrequency(22,222) //false
function areThereDuplicates() {
let collection = {}
for(let val in arguments){
collection[arguments[val]] = (collection[arguments[val]] || 0) + 1
}
for(let key in collection){
if(collection[key] > 1) return true
}
return false;
}