Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การสร้างพาลินโดรมด้วยการเปลี่ยนตัวอักษรเป็นตัวข้างเคียงใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน 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 เปลี่ยนไม่ถึงกัน