빈도수 세기 패턴 과제

두 개의 문자열을 취하며 두 문자열이 서로의 아나그램(어느 한 단어를 재배열하면 상대편 단어가 될 수 있는 것)이면 참이 반환됨.

validAnagram("", ""); // true
validAnagram("aaz", "zza"); // false
validAnagram("anagram", "nagram"); // true
validAnagram("rat", "car"); // false
validAnagram("awesome", "awesom"); // false
validAnagram("qwerty", "qeywrt"); // true
validAnagram("texttwisttime", "timetwisttext"); // true

모두 소문자로 가정 O(n)

// 내 풀이
function validAnagram(word, reword) {
  // add whatever parameters you deem necessary - good luck!
  if (word.length !== reword.length) return false;

  const sortWord = [...word].sort();
  const sortReword = [...reword].sort();

  return sortWord.every((word, idx) => word === sortReword[idx]);
}

validAnagram("", "");
validAnagram("aaz", "zza");
validAnagram("anagram", "nagaram");
validAnagram("rat", "car");
validAnagram("awesome", "awesom");
validAnagram("amanaplanacanalpanama", "acanalmanplanpamana");
validAnagram("qwerty", "qeywrt");
validAnagram("texttwisttime", "timetwisttext");
// 강의 풀이
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");

Last updated