Java Anagram Checker: методы определения того, являются ли две строки анаграммами

Чтобы найти анаграмму двух строк в Java, вы можете использовать различные методы. Вот несколько подходов:

Метод 1: сортировка и сравнение

  1. Преобразуйте обе строки в массивы символов.
  2. Сортировка массивов символов.
  3. Сравните отсортированные массивы, чтобы проверить, равны ли они.
    • Если отсортированные массивы равны, строки являются анаграммами.
    • Если отсортированные массивы не равны, строки не являются анаграммами.

Вот пример реализации этого метода:

import java.util.Arrays;
public class AnagramChecker {
    public static boolean areAnagrams(String str1, String str2) {
        // Convert strings to character arrays
        char[] arr1 = str1.toCharArray();
        char[] arr2 = str2.toCharArray();
        // Sort the character arrays
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        // Compare the sorted arrays
        return Arrays.equals(arr1, arr2);
    }
    public static void main(String[] args) {
        String str1 = "listen";
        String str2 = "silent";

        if (areAnagrams(str1, str2)) {
            System.out.println("The strings are anagrams.");
        } else {
            System.out.println("The strings are not anagrams.");
        }
    }
}

Выход:

The strings are anagrams.

Метод 2: подсчет символов

  1. Создайте массив размером 26, чтобы представить количество каждого символа алфавита.
  2. Пройтись по первой строке и увеличить количество каждого встреченного символа.
  3. Пройти по второй строке и уменьшить количество каждого встреченного символа.
  4. Если все значения в массиве равны нулю, строки являются анаграммами.
    • Если какой-либо счетчик не равен нулю, строки не являются анаграммами.

Вот пример реализации этого метода:

public class AnagramChecker {
    public static boolean areAnagrams(String str1, String str2) {
        // Create an array to hold character counts
        int[] charCount = new int[26];
        // Iterate through the first string and increment character counts
        for (char c : str1.toCharArray()) {
            charCount[c - 'a']++;
        }
// Iterate through the second string and decrement character counts
        for (char c : str2.toCharArray()) {
            charCount[c - 'a']--;
        }
// Check if all counts are zero
        for (int count : charCount) {
            if (count != 0) {
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
        String str1 = "listen";
        String str2 = "silent";

        if (areAnagrams(str1, str2)) {
            System.out.println("The strings are anagrams.");
        } else {
            System.out.println("The strings are not anagrams.");
        }
    }
}

Выход:

The strings are anagrams.