Сравнить массивы С++

Вводятся два массива. Как определить, можно ли из символов первого массива создать строку идентичную второму массиву? 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;
}

Ответы (1 шт):

Автор решения: Zhihar

можно попробовать такой алгоритм (если я правильно понял задачу)

  1. пройтись по 1 массиву и подсчитать какие символы сколько раз встречаются, например заполнив структуру

     std::map<char, int>
    
  2. пройтись по второму массиву и выполнить обратную операцию, т.е. уменьшать счетчик для найденных символов, если счётчик упал до -1, то значит нельзя используя массив 1 получить массив 2

Пример:

"aboba" -> "abob"

a: 2
b: 2
o: 1

[a]bob

a: 1
b: 2
o: 1

a[b]ob

a: 1
b: 1
o: 1

ab[o]b

a: 1
b: 1
0: 0

abo[b]

a: 1
b: 0
0: 0

нигде -1 не возникло - значит все ок

→ Ссылка