Escreva um algoritimo em português estruturado (ou em uma linguagem de
programação de sua preferência) capaz de identificar a(s) letra(s) mais frequente(s) em
uma cadeia de caracteres. A entrada será uma cadeia de caracteres sem espaços de no
máximo 1000 caracteres. A saída deverá ser uma lista com as letra(s) seguida por sua
porcentagem com duas casas decimais, deve ser ordenada pela porcentagem do maior
para o menor. Deve-se desconsiderar diferenças de maiúsculas e minúsculas. Qualquer
outro caractere que não seja uma letra de A a Z deverá ser desconsiderado.
Exemplo:
Entrada: Arara
Saída:
a = 60%
r = 40%
Gente alguém pode me ajudar nesse?
Soluções para a tarefa
Resposta:
Solução em C#
Explicação:
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var palavra = "Arara";
var countLetters = GetLettersFrequency(palavra);
PrintLetterFreq(countLetters);
Console.ReadKey();
}
private static void PrintLetterFreq(Dictionary<char, int> countLetters)
{
float total = countLetters.Values.Sum();
foreach (var key in countLetters.Keys.OrderByDescending(k => countLetters[k]))
{
Console.WriteLine($"{key}={countLetters[key]/total*100f:#.##}%");
}
}
static Dictionary<char, int> GetLettersFrequency(string word)
{
var countLetters = new Dictionary<char, int>();
var regexLetters = new Regex(@"[a-z]");
regexLetters.Matches(word.ToLower()).AsEnumerable().Select(m => m.Value.ToCharArray()[0])
.ToList().ForEach(a =>
{
if (countLetters.ContainsKey(a))
{
countLetters[a]++;
}
else
{
countLetters.Add(a, 1);
}
});
return countLetters;
}
}