ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับสตริงอักขระเป็นอาร์กิวเมนต์เท่านั้น
ฟังก์ชันของเราควรเตรียมและสตริงใหม่ตามสตริงเดิมที่มีการวางอักขระที่ปรากฏขึ้นหลายครั้งก่อนตามด้วยตัวเลขที่มีความถี่ลดลง
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −
const str = 'free';
จากนั้นผลลัพธ์ควรเป็น −
const output = 'eefr';
คำอธิบายผลลัพธ์:
เนื่องจาก e ปรากฏสองครั้งจึงถูกวางไว้ก่อนแล้วตามด้วย r และ f
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const str = 'free';
const frequencySort = (str = '') => {
let map = {}
for (const letter of str) {
map[letter] = (map[letter] || 0) + 1;
};
let res = "";
let sorted = Object.keys(map).sort((a, b) => map[b] - map[a])
for (let letter of sorted) {
for (let count = 0; count < map[letter]; count++) {
res += letter
}
}
return res;
};
console.log(frequencySort(str)); คำอธิบายโค้ด:
ขั้นตอนที่เราทำคือ −
-
ขั้นแรก เราเตรียม hashmap ของการนับตัวอักษร
-
จากนั้นเราจัดเรียงแผนที่ตามจำนวนตัวอักษร
-
และสุดท้าย เราก็สร้าง res string จาก sorted letter
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
eefr