Этот комментарий говорит о том, что существует альтернатива O (n) моему решению O (n log n) для этой проблемы:
Учитывая string str("helloWorld")
, ожидаемый результат:
l = 3
o = 2
Мое решение состояло в том, чтобы сделать это:
sort(begin(str), end(str));
for(auto start = adjacent_find(cbegin(str), cend(str)), finish = upper_bound(start, cend(str), *start); start != cend(str); start = adjacent_find(finish, cend(str)), finish = upper_bound(start, cend(str), *start)) {
cout << *start << " = " << distance(start, finish) << endl;
}
Это, очевидно, ограничен сортировкой str
. Я думаю, для этого потребуется решение для сортировки в виде ковша? Есть ли что-нибудь более умное, чего я не хватает?