ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน 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