ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับสตริง ฟังก์ชันสามารถทำการดำเนินการต่อไปนี้บนสตริง:
- ตัวอักษรแต่ละตัว ต้องเปลี่ยนเป็นตัวอักษรก่อนหน้าหรือถัดไปในอักษรอังกฤษ
- "a" เปลี่ยนได้แค่ "b" และ "z" เปลี่ยนได้แค่ "y"
ฟังก์ชันควรคืนค่า true หากมีผลลัพธ์อย่างน้อยหนึ่งแบบที่เป็นพาลินโดรม false ถ้าไม่มี
ตัวอย่าง
โค้ดตัวอย่างด้านล่าง:
const str = 'adfa';
const canFormPalindrome = (str = '') => {
const middle = str.length / 2;
for (let i = 0; i < middle; i++) {
const first = str[i].charCodeAt();
const last = str[str.length - (i + 1)].charCodeAt();
const distance = Math.abs(last - first);
if (distance > 2 || distance === 1) {
return false;
}
}
return true;
};
console.log(canFormPalindrome(str));
ผลลัพธ์
true
คำอธิบายเพิ่มเติม
ตรรกะ: เพื่อให้คู่ตัวอักษร (i, n-1-i) สามารถกลายเป็นตัวอักษรเดียวกันได้หลังเปลี่ยน ±1 ระยะห่าง ASCII ต้องเป็น 0 หรือ 2 (เช่น a↔c, b↔b) ระยะ 1 ไม่ได้เพราะ a→b, b→a จะต่างกัน ระยะ >2 เปลี่ยนไม่ถึงกัน