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