всем привет. в общем, решаю задачки на codewars, и первый раз столкнулся с такой проблемой: в MVS код компилируется верно, в отличие от того, что получается в онлайн-компиляторе на сайте (как и в других онлайн-компиляторах). в настройках проекта в MVS стоит C++ 17 (этот же стандарт используется на codewars)
по итогу работы функции is_merge в обоих случаях должен быть получен true. в MVS этот результат я и получаю, но на codewars возвращается false. подозреваю, что дело может быть в методе find, но я в кодинге новичок, поэтому хз
сам код:
#include <iostream>
#include <unordered_map>
bool is_merge(const std::string& s, const std::string& part1, const std::string& part2)
{
if (s.size() < part1.size() + part2.size()) return false;
std::string sCopy = s;
std::unordered_multimap<int, char> part1map;
std::unordered_multimap<int, char> part2map;
int index = 0;
int order = 0;
for (auto& letter : part1)
{
part1map.emplace(index, letter);
++index;
}
index = 0;
for (auto& letter : part2)
{
part2map.emplace(index, letter);
++index;
}
for (auto& elem : part1map)
{
if (sCopy.find(elem.second) != std::string::npos && elem.first >= order)
{
sCopy.erase(sCopy.find(elem.second), 1);
order = elem.first;
}
}
order = 0;
for (auto& elem : part2map)
{
if (sCopy.find(elem.second) != std::string::npos && elem.first >= order)
{
sCopy.erase(sCopy.find(elem.second), 1);
order = elem.first;
}
}
return sCopy.size() == 0 ? true : false;
}
int main()
{
std::cout << is_merge("acab", "ab", "ac") << std::endl;
std::cout << is_merge("codewars", "code", "wars") << std::endl;
}