ภาคต่อ
สำหรับจุดประสงค์ของปัญหานี้ เรากำหนดลำดับย่อยเป็นลำดับที่สามารถได้มาจากลำดับหนึ่งโดยการลบอักขระบางตัวโดยไม่เปลี่ยนลำดับขององค์ประกอบที่เหลือ สตริงใด ๆ เป็นผลสืบเนื่องมาจากตัวมันเอง และสตริงว่างนั้นเป็นผลสืบเนื่องมาจากสตริงใด ๆ
ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของสตริงเป็นอาร์กิวเมนต์เดียว ฟังก์ชันของเราจำเป็นต้องค้นหาความยาวของลำดับย่อยที่ไม่ธรรมดาที่ยาวที่สุดในบรรดาสิ่งเหล่านี้
โดยลำดับย่อยที่ผิดปกติที่ยาวที่สุด เราหมายถึงลำดับย่อยที่ยาวที่สุดของหนึ่งในสตริงในอาร์เรย์ และลำดับย่อยนี้ไม่ควรเป็นผลสืบเนื่องใดๆ ของสตริงอื่นๆ ในอาร์เรย์
หากไม่มีลำดับย่อยที่ผิดปกติ เราควรคืนค่า -1
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −
const arr = ["aba", "cdc", "eae"];
จากนั้นผลลัพธ์ควรเป็น −
const output = 3;
คำอธิบายผลลัพธ์:
“aba”, “cdc” และ “eae” ล้วนเป็นผลสืบเนื่องของความยาว 3 ที่ไม่ธรรมดา
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr = ["aba", "cdc", "eae"]; const longestUncommon = (strs) => { const map = {}; const arr = []; let max = -1; let index = -1; for(let i = 0; i < strs.length; i++){ map[strs[i]] = (map[strs[i]] || 0) + 1; if(map[strs[i]] > 1){ if(max < strs[i].length){ max = strs[i].length index = i; } } } if(index === -1) { strs.forEach(el =>{ if(el.length > max) max = el.length; }) return max; } for(let i = 0; i < strs.length; i++){ if(map[strs[i]] === 1) arr.push(strs[i]); } max = -1 for(let i = arr.length - 1; i >= 0; i--){ let l = arr[i]; let d = 0; for(let j = 0; j < strs[index].length; j++){ if(strs[index][j] === l[d]){ d++; } } if(d === l.length){ let temp = arr[i]; arr[i] = arr[arr.length - 1]; arr[arr.length - 1] = temp; arr.pop(); } } arr.forEach(el =>{ if(el.length > max) max = el.length; }) return max; }; console.log(longestUncommon(arr));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
3