JavaScript로 "Anagram"을 감지하는 방법은 무엇입니까?

아나그램이라는 용어가 생소하신 분들을 위해 간단히 말씀드리자면,

An anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once. [1]



그래서 우리는 두 개의 문자열을 인수로 취하는 함수를 작성해야 하고 함수는 그것들이 아나그램인지 아닌지를 비교할 것입니다.

먼저 함수를 정의하자.

function checkAnagram(stringOne, stringTwo){

}


이제 논리 부분,

주의 깊게 읽으면 아나그램은 단어나 구가 될 수 있습니다. 구라면 공백을 포함하고 공백의 수는 두 문자열에서 다를 수 있지만 여전히 아나그램일 수 있음을 의미합니다. 와 같은,

'Monkey writes'와 '뉴욕 타임즈'

두 문자열 모두 대소문자와 공백 수가 다르지만 여전히 애너그램입니다. 따라서 대소문자를 구분하지 않고 문자열에서 공백이 있으면 제거해야 합니다.

function checkAnagram(stringOne, stringTwo){
  let a = stringOne
    .split("")
    .filter((l) => l !== " ")
    .join("")
    .toLowerCase();
  let b = stringTwo
    .split("")
    .filter((l) => l !== " ")
    .join("")
    .toLowerCase();
}


여기서 우리가 한 것은 두 개의 변수를 선언하고 각 문자열을 소문자와 공백이 제거된 버전으로 저장하는 것입니다.

이제 알파벳순으로 정렬하고 두 문자열을 비교해야 합니다. 일치하면 함수는 true를 반환합니다. 그렇지 않으면 거짓입니다.

function checkAnagram(stringOne, stringTwo){
  let a = stringOne
    .split("")
    .filter((l) => l !== " ")
    .join("")
    .toLowerCase();
  let b = stringTwo
    .split("")
    .filter((l) => l !== " ")
    .join("")
    .toLowerCase();

  return a.split("").sort().join("") === b.split("").sort().join("");

}


마지막 줄은 문자열을 분할하고 알파벳순으로 정렬한 다음 문자를 결합하여 비교 결과를 제공합니다.

이제 이 코드를 리팩토링하여 더 짧게 만들 수 있습니다. 나는 당신이 이해할 수 있도록 긴 버전을 썼습니다.

function checkAnagram(stringOne, stringTwo) {
    return (stringOne.toLowerCase().split("").filter((l) => l !== " ").sort().join("") ===
        stringTwo.toLowerCase().split("").filter((l) => l !== " ").sort().join(""));
}


여기서는 대소문자를 먼저 변경한 다음 배열로 분할합니다. 공백을 제거합니다. 그런 다음 배열을 사전순으로 정렬한 다음 배열을 문자열에 결합하고 비교 결과를 반환합니다.

더 나은 해결책을 찾으면 알려주세요.

좋은 웹페이지 즐겨찾기