The operation involves counting how many times each character in alphabetic characters in a given string.
Using Object (Simple and Efficient for Small to Moderate Strings)
Object in JavaScript allow storing key value pairs. So we use items as keys and their frequencies as values.
function printFreq(s) {
const freq = {};
for (let x of s) {
freq[x] = (freq[x] || 0) + 1;
}
// Iterate through sorted characters
// and print their frequencies
for (let x of Object.keys(freq).sort()) {
console.log(x + ": " + freq[x]);
}
}
// Example usage
printFreq("geeksforgeeks");
Output
{ g: 2, e: 4, k: 2, s: 2, f: 1, o: 1, r: 1 }
Using Map (Simple and Efficient for Large Strings)
JS Map also store key value pairs and works for data types other than string as well.
function printFreq(s) {
const m = new Map();
// Count frequency of each character using Map
for (let x of s) {
m.set(x, (m.get(x) || 0) + 1);
}
// Convert Map keys to array, sort them,
// and then print the frequencies
for (let x of [...m.keys()].sort()) {
console.log(x + ": " + m.get(x));
}
}
// Example usage
printFreq("geeksforgeeks");
Output
Map(7) {
'g' => 2,
'e' => 4,
'k' => 2,
's' => 2,
'f' => 1,
'o' => 1,
'r' => 1
}
Using Regular Expression (Worked for Mixed Input)
If our input string contains mixed characters and we wish to find frequencies of only alphabetic characters, we can use regular expressions.
function printFreq(s) {
const freq = (s.match(/[a-z]/gi) || []).reduce((freq, x) => {
freq[x] = (freq[x] || 0) + 1;
return freq;
}, {});
// Convert keys to array, sort them, and
// print the frequencies
for (let x of Object.keys(freq).sort()) {
console.log(x + ": " + freq[x]);
}
}
// Example usage
printFreq("geeksforgeeks");
Output
{ g: 2, e: 4, k: 2, s: 2, f: 1, o: 1, r: 1 }
Please refer Frequency of characters in Alphabetical Order for different algorithms and their time complexities.