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

สตริงย่อยที่ไม่ซ้ำในสตริงวงกลมใน JavaScript


ปัญหา

สมมติว่าเรามี 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