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

Две строки являются анаграммами, если совпадают количества каждого символа. Сначала проверяют длины, затем сравнивают частоты за линейное время.

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

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

Две строки являются анаграммами, если совпадают количества каждого символа. Сначала проверяют длины, затем сравнивают частоты за линейное время.

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

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

Условие

Даны две строки src и dst. Нужно вернуть true, если dst — анаграмма src, и false в остальных случаях.

Пример 1: Ввод: src = "anagram", dst = "nagaram" Вывод: true

Пример 2: Ввод: src = "rat", dst = "car" Вывод: false

Ответ

Две строки являются анаграммами, если совпадают количества каждого символа. Сначала проверяют длины, затем сравнивают частоты за линейное время.

Для строк из байтов, например ASCII:

#include <array>
#include <cstddef>
#include <string>

bool isAnagram(const std::string& src, const std::string& dst) {
    if (src.size() != dst.size()) return false;
    std::array<std::size_t, 256> counts{};
    for (unsigned char c : src) ++counts[c];
    for (unsigned char c : dst) {
        if (counts[c] == 0) return false;
        --counts[c];
    }
    return true;
}

Здесь предполагается 8-битный байт. Регистр, пробелы и пунктуация учитываются. Для Unicode нужно сначала декодировать текст и договориться о нормализации и единице сравнения: байты UTF-8 не эквивалентны символам. Время O(n), память O(1) для фиксированного алфавита.

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

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

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

Подробнее