Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การเรียงลำดับอักขระสตริงตามความถี่ใน JavaScript


ปัญหา

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