De dragul de a avea și alte limbaje aici,
C#
var dataIn = " vasile are mere ";
var frequencies = new Dictionary<char, int>();
var characters = dataIn.ToCharArray();
foreach (var c in characters)
{
if (frequencies.ContainsKey(c))
frequencies[c] += 1;
else
frequencies.Add(c, 1);
}
Și în Java ar arăta asemănător, doar că ai folosi clasa HashMap
în loc de Dictionary
; bineînțeles, diferă și interfața, deci put
în loc de Add
, etc.
Oricum, conceptul e același - ia fiecare literă în parte și pune-le alături de frecvențele lor într-un HashMap
(sau Dictionary
sau array
sau oricum i-ar zice limbajul tău). Dacă nu ai luxul ăsta și ești în C
, atunci poți folosi două liste, una pentru litere, iar alta pentru frecvențe; aici e important să păstrezi același index pentru ambele liste, e.g.:
char[] characters = ['v', 'a', 's', ...]
int[] frequencies = [1, 2, 1, ...]
Dacă nu ai luxul spațiului, ai putea folosi o singură listă pentru ambele informații. Asta presupune, însă, că poți reprezenta fiecare literă printr-un număr, e.g. șirul tău de caractere vine în ASCII. Așa ai putea face convenția că în lista ta, indexul reprezintă valoarea numerică a literei, iar valoarea reprezintă frecvența literei respective.
int[] frequencies = [..., 2, 0, 0, 0, ...]
// "a" în tabelul ASCII e la 97, deci frequencies[97] = 2