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

การสร้างคำที่ยาวที่สุดใน JavaScript


ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับสตริงตัวอักษรภาษาอังกฤษแบบสุ่ม str เป็นอาร์กิวเมนต์แรกและอาร์เรย์ของสตริง arr เป็นอาร์กิวเมนต์ที่สอง

หน้าที่ของฟังก์ชันของเราคือพยายามลบอักขระบางตัวออกจากสตริง str และตรวจสอบว่าคำใดยาวที่สุดที่สามารถสร้างได้ในอาร์เรย์ arr เช่นกัน ฟังก์ชันของเราควรส่งคืนสตริงที่ยาวที่สุดเท่าที่จะเป็นไปได้

หากไม่มีสตริงดังกล่าว เราควรส่งคืนสตริงว่าง

ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −

const str = 'sdgfdfghdjh';
const arr = ['sdf', 'fghj', 'gfdfg', 'absc', 'a', 'hasl'];

จากนั้นผลลัพธ์ควรเป็น −

const output = 'gfdfg';

คำอธิบายผลลัพธ์:

แม้ว่าองค์ประกอบแรกและตัวที่สองของอาร์เรย์สามารถเกิดขึ้นได้โดยการลบอักขระออกจากสตริง แต่ 'gfdfg' เป็นสตริงที่ยาวที่สุด (5) ซึ่งเราสามารถสร้างขึ้นจากสตริง str

ตัวอย่าง

รหัสสำหรับสิ่งนี้จะเป็น −

const str = 'sdgfdfghdjh';
const arr = ['sdf', 'fghj', 'gfdfg', 'absc', 'a', 'hasl'];
const findLongestWord = (str = '', arr = []) => {
   arr.sort((a, b) => {
      if (a.length !== b.length) {
         return b.length - a.length;
      };
      return a.localeCompare(b);
   });
   for(const word of arr){
      let index = -1;
      for(const char of word){
         index = str.indexOf(char, index + 1);
         if(index < 0){
            break;
         };
      };
      if (index >= 0){
         return word;
      };
   };
   return '';
};
console.log(findLongestWord(str, arr));

คำอธิบายโค้ด:

ขั้นตอนที่เราดำเนินการคือ -

  • จัดเรียงอาร์เรย์ arr ตามความยาวก่อนแล้วจึงเรียงลำดับคำศัพท์

  • วนซ้ำแต่ละคำใน arr หากทุกตัวอักษรของคำไม่อยู่ในสตริง str เราก็จะกลับมา

  • และหากทุกคำตรงกัน เราก็ส่งคืนคำนั้น

และเนื่องจากเราจัดเรียงพจนานุกรมของเราแล้ว เรารับประกันได้ว่าคู่แรกคือคำตอบของเรา

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น -

gfdfg