Skip to main content
Code Review

Return to Revisions

2 of 2
add link to library code
Konrad Rudolph
  • 6.7k
  • 23
  • 35

Here’s how I’d write this using the standard library:

#include <algorithm>
#include <unordered_map>
#include <string_view>
char most_frequent_char(std::string_view str) {
 std::unordered_map<char, int> counts;
 for (auto c : str) counts[c] += 1;
 return std::max_element(
 begin(counts), end(counts),
 [](auto a, auto b) {return a.second < b.second;}
 )->first;
}

But to be honest I’m not happy with manually iterating over the string to counts its characters. In actual code I’d probably abstract away the creation of a frequency table, which would presumably also have a max function. In Python this directly corresponds to the collections.Counter class. If we assume the existence of this utility class (left as an exercise to the reader), the implementation becomes

char most_frequent_char(std::string_view str) {
 return max(freq_table{str}).first;
}

Incidentally, in statistics this property is known as the "mode" of a distribution.

Konrad Rudolph
  • 6.7k
  • 23
  • 35
default

AltStyle によって変換されたページ (->オリジナル) /