Определение, являются ли две строки анаграммами

Две строки являются анаграммами, если у каждого символа совпадает число вхождений. Подсчёт частот позволяет проверить это за O(n) без сортировки.

Короткий ответ

Что ответить на собеседовании

Две строки являются анаграммами, если у каждого символа совпадает число вхождений. Подсчёт частот позволяет проверить это за O(n) без сортировки.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать функцию, которая проверит, совпадают ли наборы символов в двух строках, независимо от их порядка (пример: "abc" и "cab"). using System;

public class Test
{
    // abc
    // acb
    // bac
    // bca
    // cab
    // cba
    public static bool (AreAnagrams(string a, string b))
    {

    }
}

    public static void Main(){
    Console.WriteLine(AreAnagrams("abc", "cab"));
    }

Ответ

Две строки являются анаграммами, если у каждого символа совпадает число вхождений. Подсчёт частот позволяет проверить это за O(n) без сортировки.

public static bool AreAnagrams(string a, string b)
{
    if (a is null || b is null || a.Length != b.Length) return false;
    var counts = new Dictionary<char, int>();
    foreach (char c in a) {
        counts.TryGetValue(c, out int n);
        counts[c] = n + 1;
    }
    foreach (char c in b) {
        if (!counts.TryGetValue(c, out int n) || n == 0) return false;
        counts[c] = n - 1;
    }
    return true;
}

Для abc и cab результат true. Здесь учитываются регистр, пробелы и кодовые единицы UTF-16. Для пользовательского Unicode-текста отдельно согласуют нормализацию и сравнение Rune либо графем. В сигнатуре из условия нужно убрать лишние скобки вокруг имени метода.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее