Как проверить, существует ли определённая строка внутри другой строки с определённым условием
Мне нужно написать функцию, которая возвращает true в случае если из первой строки, можно собрать вторую. И false если нельзя. Например:
scramble('rkqodlw', 'world') ==> True
scramble('cedewaraaossoqqyt', 'codewars') ==> True
scramble('katas', 'steak') ==> False
scramble('scriptjavx', 'javascript') ==> False
Вот, что я уже попробовал:
https://pastebin.com/Hw2qdGuB
Но код не проходит тест, когда в строке содержится одинаковое количество каких-либо символов, например в случае №4 символ a. Как можно реализовать алгоритм иначе и более эффективно?
Ответы (2 шт):
Автор решения: Кирилл Малышев
→ Ссылка
bool scramble(string s1, string s2) {
unordered_multiset<char> letters(s1.begin(), s1.end());
for(char& c : s2) {
const auto it = letters.find(c);
if (it != letters.end()) {
letters.erase(it);
} else {
return false;
}
}
return true;
}
Автор решения: Mikhailo
→ Ссылка
Можно вот так.
bool scramble(const string& a, const string& b) {
int s[256] = {0};
for(char c: a) s[(unsigned char)c]++;
for(char c: b) if (--s[(unsigned char)c] < 0) return false;
return true;
}