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

การแยกสตริงออกเป็นส่วนสูงสุดใน JavaScript


ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับสตริง str เป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์เดียว

จุดประสงค์ของฟังก์ชันของเราคือแบ่งสตริงนี้ออกเป็นส่วนๆ ให้ได้มากที่สุด เพื่อให้แต่ละตัวอักษรปรากฏในส่วนใหญ่หนึ่งส่วน และส่งคืนอาร์เรย์ของจำนวนเต็มที่แสดงถึงขนาดของชิ้นส่วนเหล่านี้

ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ

ป้อนข้อมูล

const str = "ababcbacadefegdehijhklij";

ผลผลิต

const output = [9, 7, 8];

คำอธิบายผลลัพธ์

พาร์ทิชันคือ "ababcbaca", "defegde", "hijhklij" นี่คือพาร์ทิชันเพื่อให้แต่ละตัวอักษรปรากฏในส่วนใหญ่หนึ่งส่วน พาร์ติชันเช่น "ababcbacadefegde", "hijhklij" ไม่ถูกต้อง เพราะมันแยกสตริง str ออกเป็นส่วนน้อย

ตัวอย่าง

ต่อไปนี้เป็นรหัส -

const str = "ababcbacadefegdehijhklij";
const splitStrings = (str = '') => {
   const res = []
   const map = {}
   for (let i = 0; i < str.length; i++) {
      map[str[i]] = i
   }
   let start = 0
   while (start <= str.length - 1) {
      let end = map[str[start]]
      for (let i = start + 1; i < end; i++) {
         const currentEnd = map[str[i]]
         if (currentEnd > end) {
            end = currentEnd
         }
      }
      res.push(end - start + 1)
      start = end + 1
   }
   return res
};
console.log(splitStrings(str));

ผลลัพธ์

[ 9, 7, 8 ]