Задать вопрос

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

Вводятся два массива. Как определить, можно ли из символов первого массива создать строку идентичную второму массиву? 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;
}
  • Вопрос задан
  • 69 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Подсчитайте, сколько каждого символа встречается в первой строке и убедитесь, что во второй - их не больше.
Самый простой способ сделать это - это завести массив счетчиков на 256 элементов. Для символов первой строки увеличивайте счетчик по индексу static_cast<int>(s[i]) на 1, для второй строки - вычитайте 1. Если где-то получили -1, то составить нельзя.

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

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

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