Не плохо было бы прилагать небольшое описание к алгоритму, чтобы сразу понимать что вы хотите/хотели сделать. Или хотя бы используйте более говорящие названия.
Путей для микрооптимизаций видно сходу достаточно много, но это не даст какого-то огромного прироста (убрать лишние проверки, заменить switch, убрать бесконечные операторы взятия остатка и заменить на побитовое И, и сделать это всё одной функцией)
Макрооптимизации же начинаются с перелопачивания алгоритма(который вам в общих словах описали другие участник проекта, единственное что - можно попробовать заменить std::map на статическую таблицу поиска, если нет потребности в широком алфавите + пара доп. структур) заканчиваясь распараллеливанием кода на несколько потоков и векторизацией.
Как вы нам, так и мы вам. #include
#include
using namespace std;
bool remer(string& str)
{
int nechet = str.size() % 2;
map mapa;
for (auto& i : str) mapa++;
for (auto& i : mapa)
{
if (i.second % 2) nechet--;
if (nechet= 2)
{
str[it] = str[str.size() - 1 - it] = i.first;
it++; i.second -= 2;
}
if (i.second) str[str.size() / 2] = i.first;
}
return true;
}
int main()
{
string f;
cin >> f;
if (remer(f)) cout
Подсчитать количество всех символов и за линию (вместо твоего квадрата) сформировать палиндром (пропихивать по 2 символа - 1 назад, 1 вперед)
Если останется один символ без пары - он идет в центр. Если больше, то ответа нет.