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

กรณีปัญหาคำที่แสดงออกใน JavaScript


บางครั้งคนเขียนจดหมายซ้ำเพื่อแสดงความรู้สึกพิเศษ เช่น "hello" −> "heeellooo", "hi" −> "hiiii" ในสตริงเหล่านี้ เช่น "heeellooo" เรามีกลุ่มตัวอักษรที่อยู่ติดกันซึ่งเหมือนกันทั้งหมด:"h", "eee", "ll", "ooo"

สำหรับสตริงที่กำหนด S บางคำ คำที่ใช้ค้นหาจะยืดออกได้หากสามารถทำให้เท่ากับ S โดยใช้แอปพลิเคชันส่วนขยายต่อไปนี้จำนวนเท่าใดก็ได้ เลือกกลุ่มที่ประกอบด้วยอักขระ c และเพิ่มจำนวนอักขระ c ลงในกลุ่ม เพื่อให้กลุ่มมีขนาดตั้งแต่ 3 ขึ้นไป

ตัวอย่างเช่น เริ่มต้นด้วย "hello" เราสามารถขยายกลุ่ม "o" เพื่อรับ "hellooo" ได้ แต่เราไม่สามารถเรียก "helloo" ได้ เนื่องจากกลุ่ม "oo" มีขนาดน้อยกว่า 3 เรายังทำได้ ส่วนขยายอื่นเช่น "ll" −> "llllll" เพื่อรับ "helllllooo" หาก S ="helllllooo" คำว่า "hello" ที่ใช้ค้นหาจะยืดเยื้อเนื่องจากการดำเนินการส่วนขยายทั้งสองนี้:query ="hello" −> "hellooo" −> "helllllooo" =S.

จากรายชื่อคำที่ใช้ค้นหา เราจำเป็นต้องคืนค่าจำนวนคำที่ยืดออก

ตัวอย่างเช่น −

หากสตริงอินพุตเป็น −

const str = 'heeellooo';

และรายการคำศัพท์คือ −

const words = ["hello", "hi", "helo"];

และผลลัพธ์ควรเป็น −

const output = 1

ตัวอย่าง

รหัสสำหรับสิ่งนี้จะเป็น −

const str = 'heeellooo';
const words = ["hello", "hi", "helo"];
const extraWords = (str, words) => {
   let count = 0;
   for (let w of words) {
      let i = 0;
      let j = 0;
      for (; i < str.length && j < w.length && w[j] === str[i];) {
         let lenS = 1;
         let lenW = 1;
         for (; i+lenS < str.length && str[i+lenS] === str[i]; lenS++);
         for (; j+lenW < w.length && w[j+lenW] === w[j]; lenW++);
         if (lenS < lenW || lenS > lenW && lenS < 3) break;
         i += lenS;
         j += lenW;
      }
      if (i === str.length && j === w.length) {
         count++;
      }
   }
   return count;
}
console.log(extraWords(str, words));

ผลลัพธ์

และผลลัพธ์ในคอนโซลจะเป็น −

1