เราต้องเขียนฟังก์ชัน JavaScript ที่รับสตริงตัวอักษรเป็นอาร์กิวเมนต์แรก (str) และตัวเลขเป็นอาร์กิวเมนต์ที่สอง (num) ฟังก์ชันต้องนับจำนวนสตริงพาลินโดรมที่มีความยาวเท่ากับ num ที่สร้างได้จาก str แล้วคืนค่าจำนวนนั้น
ตัวอย่าง
ถ้าสตริงและตัวเลขนำเข้าคือ:
const str = 'ij'; const num = 4;
ผลลัพธ์ควรเป็น:
const output = 4;
เพราะพาลินโดรมที่เป็นไปได้ 4 แบบคือ:
'iiii', 'jjjj', 'ijji', 'jiij'
แนวทาง
เราจะนับตัวอักษรที่ไม่ซ้ำกันในสตริงโดยใช้แฮชเซต ถ้าความยาวพาลินโดรมเป็นเลขคี่ ตัวอักษรกึ่งกลางจะมีตัวเลือก u แบบ โดย u คือจำนวนตัวอักษรไม่ซ้ำ
เมื่อ num เป็นเลขคู่ จำนวนความเป็นไปได้คือ power(u, num/2)
เมื่อ num เป็นเลขคี่ ต้องคูณด้วย u อีกครั้ง เพราะมี u ตัวเลือกสำหรับตำแหน่งกึ่งกลาง
ตัวอย่างโค้ด
const str = 'ij';
const num = 4;
const findValidPalindromes = (str = '', num = 1) => {
const set = new Set();
for(let i = 0; i < str.length; i++) {
const el = str[i];
set.add(el);
}
const u = set.size;
if(num & 1) {
return Math.pow(u, num/2) * u;
} else {
return Math.pow(u, num/2);
}
};
console.log(findValidPalindromes(str, num));
ผลลัพธ์
4