ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับสตริงอักขระเป็นอาร์กิวเมนต์เดียว ฟังก์ชันของเราจำเป็นต้องตรวจสอบว่าสตริง str สามารถสร้างได้โดยใช้สตริงย่อยและผนวกสตริงย่อยหลายชุดเข้าด้วยกัน
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −
const str = 'thisthisthisthis';
จากนั้นผลลัพธ์ควรเป็น −
const output = true;
คำอธิบายผลลัพธ์:
เนื่องจากสตริงถูกสร้างขึ้นโดยการต่อท้ายสตริง 'นี้' ซ้ำๆ
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const str = 'thisthisthisthis';
const repeatedSubstring = (str = '') => {
const {length} = str;
const checkSubString = ss => {
const m = ss.length;
for (let i = 0; i < length; i += m)
for (let j = 0; j < m; j++)
if (str[i+j] !== ss[j])
return false;
return true;
};
let factor = 2, len;
while (length/factor >= 1){
while (length % factor) factor++;
len = length/factor;
if (checkSubString(str.substring(0,len))){
return true;
};
factor++;
};
return false;
};
console.log(repeatedSubstring(str)); คำอธิบายโค้ด:
ประการแรก เราตั้งค่าฟังก์ชันการตรวจสอบรูปแบบสตริงย่อย
จากนั้น เราทำซ้ำผ่านปัจจัยที่เป็นไปได้ทั้งหมดที่แบ่งสตริง str เท่ากัน เพื่อพิจารณาว่าพบรูปแบบการทำซ้ำที่ใช้งานได้หรือไม่
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
true