C में पॉइंटर्स का उपयोग करके किसी स्ट्रिंग की जांच करना कि वह पालिंड्रोम है या नहीं। एक पालिंड्रोम वह स्ट्रिंग है जो आगे और पीछे से समान पढ़ी जाती है (जैसे "racecar", "madam")।
एल्गोरिदम
length:= स्ट्रिंग का आकारforward:= स्ट्रिंग के पहले वर्ण की ओर इंगित करता हैreverse:= स्ट्रिंग के अंतिम वर्ण की ओर इंगित करता हैreverse >= forwardस्थिति तक लूप करें:- यदि
reverseद्वारा इंगित वर्णforwardद्वारा इंगित वर्ण के समान है:forwardबढ़ाएं,reverseघटाएं
- अन्यथा: लूप से बाहर निकलें
- यदि
- यदि
forward >= reverse: सत्य लौटाएं (पालिंड्रोम है) - अन्यथा: असत्य लौटाएं
C प्रोग्राम
#include <stdio.h>
#include <string.h>
int solve(char *string) {
int length;
char *forward, *reverse;
length = strlen(string);
forward = string;
reverse = forward + length - 1;
for(forward = string; reverse >= forward; ) {
if(*reverse == *forward) {
reverse--;
forward++;
} else {
break;
}
}
if(forward > reverse)
return 1; // पालिंड्रोम है
else
return 0; // पालिंड्रोम नहीं
}
int main() {
char string[] = "racecar";
printf("%d\n", solve(string)); // 1 (सत्य)
char str2[] = "hello";
printf("%d\n", solve(str2)); // 0 (असत्य)
return 0;
}
आउटपुट
1 0
चरण-दर-चरण ट्रेस ("racecar" के लिए)
| चरण | forward | reverse | तुलना | कार्य |
|---|---|---|---|---|
| 1 | r (इंडेक्स 0) | r (इंडेक्स 6) | r == r ✓ | forward++, reverse-- |
| 2 | a (1) | a (5) | a == a ✓ | forward++, reverse-- |
| 3 | c (2) | c (4) | c == c ✓ | forward++, reverse-- |
| 4 | e (3) | e (3) | e == e ✓ | forward++, reverse-- |
| 5 | इंडेक्स 4 | इंडेक्स 2 | forward > reverse | लूप समाप्त, 1 लौटाएं |
समय और स्थान जटिलता
- समय: O(n) - n स्ट्रिंग की लंबाई है
- स्थान: O(1) - केवल दो पॉइंटर्स उपयोग करता है
केस-इन्सेंसिटिव संस्करण
#include <ctype.h>
int solveCaseInsensitive(char *string) {
char *forward = string;
char *reverse = string + strlen(string) - 1;
while(forward < reverse) {
if(tolower(*forward) != tolower(*reverse))
return 0;
forward++;
reverse--;
}
return 1;
}
मुख्य बिंदु
- दो-पॉइंटर तकनीक: एक शुरुआत से, एक अंत से
- कोई अतिरिक्त मेमोरी आवंटन नहीं (O(1) स्थान)
- प्रारंभिक समाप्ति: पहला बेमेल मिलने पर रुक जाता है
- पॉइंटर अंकगणित C में स्ट्रिंग मैनिपुलेशन के लिए कुशल है