C/C++

C++ Самая частая буква

Дана строка, возможно, содержащая пробелы. Определите, какая буква латинского алфавита (или какие буквы) в этой строке встречается чаще всего. При решении этой задачи заглавные и строчные буквы считаются одинаковыми, а прочие символы, не являющиеся буквами, не учитываются.


При решении этой задачи нельзя пользоваться вложенными циклами. Входная строка должна обрабатываться за один проход.


Входные данные


Дана непустая строка.


Выходные данные


Программа должна вывести в первой строке все буквы, которые встречаются чаще всего в исходной строке. Выводить буквы необходимо в заглавном написании, в алфавитном порядке, без пробелов. Во второй строке выведите единственное число — сколько раз в данной строке встречаются эти буквы.


Примеры

Ввод

Вывод

- We all live in the Yellow Submarine!

EL

5
 #include 
#include
#include
#include
#include
using namespace std;

int main()
{
map mapa;
string str;
//получаем строку str:
getline(cin, str);
//считаем сколько символов соответствующих алфавиту повторяется:
for (auto& i : str)
{
//символы a...Z isalpha сразу переводятся в больший регистр toupper
if (isalpha(i)) mapa[toupper(i)]++;
}
vector mapas;
mapas.reserve(mapa.size());
//перевод из мапы в вектор для последующей сортировки
for (auto it = mapa.begin(); it != mapa.end(); it++)
{
mapas.emplace_back(move(*it));
}
//сортировка вектора по числу букв (второе число пары) от большего к меньшему
sort(mapas.begin(), mapas.end(), [](auto& l, auto& r) {return l.second > r.second; });
//нахождение диапазона букв, имеющих одинаково максимальное число повторений
auto equ = equal_range(mapas.begin(), mapas.end(), *mapas.begin(), [](auto& l, auto& r) {return l.second > r.second; });
//печать букв из этого диапазона
for (; equ.first != equ.second; equ.first++)
cout first;
}
ОИ
Отохон Искандаров
51 416
Лучший ответ
Сергей Козлов У вас работает, но во второй строке нужно количество повторяющихся букв
Артем Атаров проходит только первые 5 тестов
 #include  
#include
#include
#include
using namespace std;
pair letter_max(const map& box) {
using pair_t = pair;
auto cmp = [](const pair_t& a, const pair_t& b) {
return a.second < b.second;
};
return *max_element(box.begin(), box.end(), cmp);
}
map split(const string& line) {
map box;
for (auto ch : line) {
const auto letter = toupper(ch);
if (isalpha(letter)) ++box[letter];
}
return box;
}
void show(const map& box, const size_t max) {
for (const auto& [letter, count] : box) {
if (count == max) {
cout
собери буквы в массив пар (буква, число), в качестве числа используй сколько раз она встречается. и найди в массиве максимум по числу
Rustam Mambeshev
Rustam Mambeshev
38 458
ПРОВЕРЕННО СИРИУСОМ(и чатом gpt))))
#include <iostream>
#include <string>
#include <algorithm>
#include <map>

using namespace std;

int main() {
string s;
getline(cin, s);
map<char, int> freq;
for (auto c : s) {
if (isalpha(c)) {
freq[toupper(c)]++;
}
}
int max_freq = 0;
for (auto p : freq) {
max_freq = max(max_freq, p.second);
}
for (auto p : freq) {
if (p.second == max_freq) {
cout << p.first;
}
}
cout << endl << max_freq << endl;
return 0;
}
DD
D1As Dumeev
126