ปัญหา
สมมติว่าเรามี S, str. ซึ่งเป็นสตริงพันรอบอนันต์ของสตริง −
"abcdefghijklmnopqrstuvwxyz".
ดังนั้น S จะมีลักษณะเช่นนี้ -
"...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd....".
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับ str มาเรียกสตริงนั้นว่า str เป็นอาร์กิวเมนต์เดียว
-
ฟังก์ชันของเราควรค้นหาว่ามีสตริงย่อยที่ไม่ซ้ำกันของ str จำนวนเท่าใดใน S
-
ในที่สุด ฟังก์ชันของเราควรคืนค่าจำนวนสตริงย่อยที่ไม่ว่างที่แตกต่างกันของ str ในสตริง S
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −
const str = "zab";
จากนั้นผลลัพธ์ควรเป็น −
const output = 6;
คำอธิบายผลลัพธ์
มีหกสตริงย่อย "z", "a", "b", "za", "ab", "zab" ของสตริง "zab" ในสตริง S
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const str = "zab"; const allSubstrings = (str = '') => { const dp = new Array(26).fill(0); dp[str.charCodeAt(0) - 97] = 1; maxCount = 1; for (let i = 1; i < str.length; i++) { if ((str.charCodeAt(i) - str.charCodeAt(i - 1) == 1) || (str.charCodeAt(i) - str.charCodeAt(i - 1) == -25)) { maxCount++; } else { maxCount = 1; } dp[str.charCodeAt(i) - 97] = Math.max(dp[str.charCodeAt(i) - 97], maxCount); } return dp.reduce((item, val) => { return val + item; }) }; console.log(allSubstrings(str));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
6