Задача JS

Задача JS

@webcoderofficial

Решение:

const buildCharObject = str => { 
  const charObj = {} 
  for (let char of str.replace(/[^\w]/g).toLowerCase()) { 
    charObj[char] = charObj[char] + 1 || 1 
  } 

  return charObj 
} 

const anagram = (strA, strB) => { 
  const aCharObject = buildCharObject(strA) 
  const bCharObject = buildCharObject(strB) 

  if (Object.keys(aCharObject).length !== Object.keys(bCharObject).length) { 
    return false 
  } 

  for (let char in aCharObject) { 
    if(aCharObject[char] !== bCharObject[char]) { 
      return false 
    } 
  } 

  return true 
}

Объяснение:

Здесь важно учитывать, что необходимо проверять каждую букву в двух входных строках и их количество в каждой строке.


finder --> f: 1 friend --> f: 1

i: 1 r: 1

n: 1 i: 1

d: 1 e: 1

e: 1 n: 1

r: 1 d: 1


Для хранения данных анаграммы стоит выбрать такую структуру, как объектный литерал JavaScript. Ключ в этом случае — символ буквы, значение — количество ее повторений в текущей строке.

Есть и другие условия:

  • Нужно убедиться в том, что регистр букв при сравнении не учитывается. Просто преобразуем обе строки в нижний или верхний регистр.
  • Исключаем из сравнения все не-символы. Лучше всего работать с регулярными выражениями.

Report Page