문제
문제 링크 : Check Whether Two Strings are Almost Equivalent
풀이
var checkAlmostEquivalent = function(word1, word2) {
const word1Obj = {}
const word2Obj = {}
for(let i =0; i<word1.length; i++) {
word1Obj[word1[i]] ? word1Obj[word1[i]] += 1 : word1Obj[word1[i]] = 1
word2Obj[word2[i]] ? word2Obj[word2[i]] += 1 : word2Obj[word2[i]] = 1
}
for( let key in word1Obj ) {
if(word2Obj[key]) {
if(Math.abs(word1Obj[key] - word2Obj[key]) > 3) return false
} else {
if(word1Obj[key] > 3 ) return false
}
}
for( let key in word2Obj ) {
if(word1Obj[key]) {
if(Math.abs(word1Obj[key] - word2Obj[key]) > 3) return false
} else {
if(word2Obj[key] > 3 ) return false
}
}
return true
};
- 문자열 word1과 word2의 알바벳 카운팅 후
- 각각 obj에서 알파벳 카운팅 차이 비교하여 return
- Runtime 64 ms, Memory 45.44 MB
다른 풀이
var checkAlmostEquivalent = function(word1, word2) {
arr = new Array(26).fill(0);
for (let i = 0; i < word1.length; i++) {
arr[word1.charCodeAt(i)-97]++;
arr[word2.charCodeAt(i)-97]--;
}
for (ar of arr) {
if (ar > 3 || ar < -3) return false;
}
return true;
};
- 배열을 만들어 word1과 word2에서의 알파벳을 카운팅
- 알바벳 카운트 차이가 3보다 크면 return false
- Runtime 54 ms, Memory 42.99 MB