Как определить, можно ли из символов первого массива создать строку идентичную второму массиву?

Вводятся два массива. Как определить, можно ли из символов первого массива создать строку идентичную второму массиву? Cложность в том что первый массив может иметь несколько одинаковых символов и при сортировке и сравнении массивов код работает неверно, по идее из символов первого массива "aboba" можно создать строку идентичную второму массиву "abob", но программа говорит что нельзя из за того что в первом массиве два символа 'a'.
#include <iostream>
#include <algorithm>

bool isPermutation(char* str1, char* str2, int size)
{
    std::sort(str1, str1 + size);
    std::sort(str2, str2 + size);
    
    for (int i = 0; i < size; ++i)
    {
        if (str1[i] != str2[i])
            return false;
    }

    return true;
}


int main()
{
    const int size = 256;
    char* str1 = new char[size];
    char* str2 = new char[size];
    std::cin >> str1 >> str2;
    std::cout << isPermutation(str1, str2, 256);
    delete[] str1;
    delete[] str2;
    return 0;
}
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Подсчитайте, сколько каждого символа встречается в первой строке и убедитесь, что во второй - их не больше.
Самый простой способ сделать это - это завести массив счетчиков на 256 элементов. Для символов первой строки увеличивайте счетчик по индексу static_cast<int>(s[i]) на 1, для второй строки - вычитайте 1. Если где-то получили -1, то составить нельзя.

И еще, это же у вас C++, судя по тегам и cin? Ну так используйте std::string. Зачем вы сишные строки выделяете?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы