자바의 아나그램

MD Aminul Islam 2023년10월12일
  1. 자바에서 아나그램 찾기
  2. XOR을 사용하여 Java에서 아나그램 찾기
  3. HashMap을 사용하여 Java에서 아나그램 찾기
자바의 아나그램

단어를 가지고 노는 것을 좋아한다면 아나그램이라는 용어를 이미 알고 있을 것입니다. 두 문자열이 동일한 문자를 포함하지만 다른 단어로 포함되어 있으면 서로를 아나그램이라고 합니다.

예를 들어 RaceCare라는 두 단어가 있는 경우 해당 단어를 보면 동일한 문자를 포함하지만 순서가 다른 것을 볼 수 있습니다.

따라서 RaceCare라는 단어를 서로 애너그램이라고 부를 수 있습니다.

이 기사에서는 두 단어가 아나그램인지 아닌지를 어떻게 알 수 있는지 알아볼 것입니다. 주제를 쉽게 이해할 수 있도록 예제와 설명으로 주제를 다룰 것입니다.

자바에서 아나그램 찾기

아래 예에서 주어진 두 문장이 철자인지 여부를 확인하는 방법을 설명했습니다. 예제 코드는 다음과 같습니다.

// importing necessary packages
import java.util.Arrays;

public class JavaAnagram {
  static void MatchAnagram(String str1, String str2) {
    String Str_1 = str1.replaceAll("\\s", ""); // Removing the spaces from the first string
    String Str_2 = str2.replaceAll("\\s", ""); // Removing the spaces from the second string
    boolean Status = true;
    if (Str_1.length() != Str_2.length()) { // Checking the length of two string
      Status = false;
    } else {
      // Converting all the characters to lower case and putting the chars of the string into a
      // character
      char[] StringArray1 = Str_1.toLowerCase().toCharArray();
      char[] StringArray2 = Str_2.toLowerCase().toCharArray();
      // Shorting the array.
      Arrays.sort(StringArray1);
      Arrays.sort(StringArray2);
      // Matching both array.
      Status = Arrays.equals(StringArray1, StringArray2);
    }
    if (Status) {
      System.out.println(Str_1 + " and " + Str_2 + " = Anagrams");
    } else {
      System.out.println(Str_1 + " and " + Str_2 + " = Anagrams");
    }
  }

  public static void main(String[] args) {
    MatchAnagram("Keep", "Peek");
    MatchAnagram("Race", "Care");
  }
}

우리는 이미 각 라인의 목적을 명령했습니다. 우리가 프로그램에서 따르는 주요 단계는 다음과 같습니다.

  • 먼저 문장에서 모든 공백을 제거했습니다.
  • 그런 다음 두 문장의 길이가 같은지 확인했습니다.
  • 길이가 같으면 먼저 모든 문자를 소문자로 변환했습니다.
  • 이제 우리는 이 두 문장의 모든 문자를 두 개의 서로 다른 배열로 가져와 배열을 정렬했습니다.
  • 마지막으로 두 배열에 동일한 요소가 포함되어 있는지 확인했습니다.
  • 일치하는 경우 두 문장 모두 아나그램입니다.

예제를 실행하면 콘솔에 아래와 같은 출력이 표시됩니다.

Keep and Peek = anagrams
Race and Care = anagrams

XOR을 사용하여 Java에서 아나그램 찾기

아래 예제에서는 비트XOR를 사용하여 Java에서 애너그램을 찾는 방법을 설명합니다. 코드는 다음과 같습니다.

public class JavaAnagram {
  public static void main(String[] args) {
    // Declaring two string
    String STR_1 = "Race";
    String STR_2 = "Care";

    if (AnagramChecking(STR_1, STR_2))
      System.out.println(STR_1 + " & " + STR_2 + " = Anagrams");
    else
      System.out.println(STR_1 + " & " + STR_2 + " = Not Anagrams");
  }

  public static boolean AnagramChecking(String STR_1, String STR_2) {
    // Remove all white spaces, convert to lower case & character array
    char[] StringArr1 = STR_1.replaceAll("\\s", "").toLowerCase().toCharArray();
    char[] StringArr2 = STR_2.replaceAll("\\s", "").toLowerCase().toCharArray();
    if (StringArr1.length != StringArr2.length) // Matching the length
      return false;

    int DoXOR = 0;

    for (int i = 0; i < StringArr1.length; i++) // Performing XOR operation
    {
      DoXOR ^= StringArr1[i] ^ StringArr2[i];
    }

    return DoXOR == 0 ? true : false;
  }
}

우리는 각 라인의 목적을 표시했습니다. 이제 예제 코드를 실행하면 콘솔에 아래와 같은 출력이 표시됩니다.

Race & Care = Anagrams

HashMap을 사용하여 Java에서 아나그램 찾기

아래 예제에서는 HashMap을 사용하여 Java에서 애너그램을 찾는 방법을 설명합니다. 코드는 다음과 같습니다.

// importing necessary packages
import java.util.HashMap;

public class JavaAnagram {
  public static void main(String[] args) {
    // Declaring two string
    String STR_1 = "Race";
    String STR_2 = "Care";
    if (AnagramCheck(STR_1.toLowerCase(), STR_2.toLowerCase()))
      System.out.println(STR_1 + " & " + STR_2 + " = Anagrams");
    else
      System.out.println(STR_1 + " & " + STR_2 + " = Not Anagrams");
  }

  public static boolean AnagramCheck(String STR_1, String STR_2) {
    if (STR_1.length() != STR_2.length()) // Matching the length
      return false;
    HashMap<Character, Integer> MyMap = new HashMap<Character, Integer>(); // Declaring a hashmap
    for (int i = 0; i < STR_1.length(); i++) {
      char ch = STR_1.charAt(i);
      if (MyMap.containsKey(ch))
        MyMap.put(ch, MyMap.get(ch) + 1);
      else
        MyMap.put(ch, 1);
    }
    for (int i = 0; i < STR_2.length(); i++) {
      char ch = STR_2.charAt(i);
      if (MyMap.containsKey(ch)) {
        if (MyMap.get(ch) == 1)
          MyMap.remove(ch);
        else
          MyMap.put(ch, MyMap.get(ch) - 1);
      } else
        return false;
    }
    if (MyMap.size() > 0)
      return false;
    return true;
  }
}

이제 예제 코드를 실행하면 콘솔에 아래와 같은 출력이 표시됩니다.

Race & Care = Anagrams

여기에서 공유되는 코드 예제는 Java로 되어 있으며 시스템에 Java가 포함되어 있지 않은 경우 환경에 Java를 설치해야 합니다.

MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn

관련 문장 - Java Algorithm