ให้อาร์เรย์ arr[] มีขนาด n ใดๆ ภารกิจของเราคือค้นหาว่าอาร์เรย์นั้นเป็นพาลินโดรมหรือไม่ Palindrome เป็นซีเควนซ์ที่สามารถอ่านย้อนหลังและไปข้างหน้าได้เหมือนกัน เช่น MADAM, NAMAN เป็นต้น
ดังนั้นในการตรวจสอบอาร์เรย์ว่าเป็น palindrome หรือไม่เพื่อให้เราสามารถสำรวจอาร์เรย์จากด้านหลังและไปข้างหน้าได้เช่น -
ตัวอย่าง
Input: arr[] = {1, 0, 0, 1} Output: Array is palindrome Input: arr[] = {1, 2, 3, 4, 5} Output: Array is not palindrome
แนวทางที่ใช้ด้านล่างมีดังนี้ −
เราจะสำรวจอาร์เรย์จากจุดเริ่มต้นและจุดสิ้นสุดจนกว่าทั้งคู่จะเท่ากันและตรวจสอบว่าองค์ประกอบจากจุดเริ่มต้นเหมือนกับองค์ประกอบจากจุดสิ้นสุดหรือไม่ จากนั้นอาร์เรย์จะเป็น palindrome มิฉะนั้นอาร์เรย์จะไม่ใช่ palindrome
อัลกอริทึม
Start In function int pallindrome(int arr[], int n) Step 1-> initialize i, j, flag and assign flag as 0 Step 2-> Loop For i = 0, j=n-1 and i< n/2, j>=n/2 and i++, j-- If arr[i]!=arr[j] then, Set flag as 1 Break End If End Loop Step 3-> If flag == 1 then, Return 0 Step 4-> Else Return 1 End function In function int main(int argc, char const *argv[]) Step 1-> Declare and initialize arr[] as {1, 0, 2, 3, 2, 2, 1} Step 2-> Declare and initialize n as sizeof(arr)/sizeof(arr[0]) Step 3-> If pallindrome(arr, n) then, Print "Array is pallindrome " End if Step 4-> Else Print "Array is not pallindrome " Return 0 End main Stop
ตัวอย่าง
#include <stdio.h> int pallindrome(int arr[], int n) { int i, j, flag = 0; for(i = 0, j=n-1; i< n/2, j>=n/2; i++, j--) { if(arr[i]!=arr[j]) { flag = 1; break; } } if (flag == 1) return 0; else return 1; } int main(int argc, char const *argv[]) { int arr[] = {1, 0, 2, 3, 2, 2, 1}; int n = sizeof(arr)/sizeof(arr[0]); if(pallindrome(arr, n)) { printf("Array is pallindrome\n"); } else printf("Array is not pallindrome\n"); return 0; }
ผลลัพธ์
หากรันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้ -
Array is not palindrome