पैलिंड्रोम सरणी
एक सरणी पैलिंड्रोम है यदि यह आगे और पीछे से समान पढ़ी जाती है।
उदाहरण
| सरणी | पैलिंड्रोम? |
|---|---|
| {1, 0, 0, 1} | हाँ |
| {1, 2, 3, 4, 5} | नहीं |
| {7} | हाँ (एकल तत्व) |
| {} | हाँ (खाली) |
| {1, 2, 2, 1} | हाँ |
| {1, 2, 3, 2, 1} | हाँ |
पुनरावृत्तीय एल्गोरिदम
- दो पॉइंटर्स:
start = 0,end = n-1 - जब तक
start < end:- यदि
arr[start] != arr[end]→ गलत लौटाएं start++,end--
- यदि
- लूप पूरा → सही लौटाएं
C प्रोग्राम
#include <stdio.h>
#include <stdbool.h>
bool is_palindrome(int arr[], int n) {
for (int i = 0, j = n - 1; i < j; i++, j--) {
if (arr[i] != arr[j])
return false;
}
return true;
}
int main() {
int arr[] = {1, 0, 2, 3, 2, 2, 1};
int n = sizeof(arr) / sizeof(arr[0]);
printf("सरणी: ");
for (int i = 0; i < n; i++) printf("%d ", arr[i]);
printf("\n");
if (is_palindrome(arr, n))
printf("सरणी पैलिंड्रोम है\n");
else
printf("सरणी पैलिंड्रोम नहीं है\n");
return 0;
}
आउटपुट
सरणी: 1 0 2 3 2 2 1 सरणी पैलिंड्रोम नहीं है
सही पैलिंड्रोम उदाहरण
सरणी: 1 2 3 2 1 सरणी पैलिंड्रोम है
फ्लैग-आधारित संस्करण (मूल कोड के समान)
int is_palindrome_flag(int arr[], int n) {
int flag = 0;
for (int i = 0, j = n - 1; i < n/2 && j >= n/2; i++, j--) {
if (arr[i] != arr[j]) {
flag = 1;
break;
}
}
return flag == 0;
}
सामान्यीकरण: किसी भी प्रकार के लिए
// मैक्रो का उपयोग करके जेनेरिक पैलिंड्रोम जांच
#define IS_PALINDROME(arr, n, type, cmp) ({ \
bool result = true; \
for (int i = 0, j = n-1; i < j; i++, j--) { \
if (cmp(arr[i], arr[j]) != 0) { result = false; break; } \
} \
result; \
})
जटिलता
- समय: O(n/2) = O(n)
- स्थान: O(1)
- तुलना: पुनरावृत्तीय, रिकर्सिव (O(n) स्टैक) से बेहतर
स्ट्रिंग पैलिंड्रोम
bool is_string_palindrome(char *str) {
int len = strlen(str);
for (int i = 0, j = len - 1; i < j; i++, j--) {
if (str[i] != str[j]) return false;
}
return true;
}