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