एक वाक्य दिया गया है और चुनौती है दिए गए वाक्य से सबसे लंबा पालिंड्रोम ढूंढना।
पालिंड्रोम क्या है?
पालिंड्रोम एक शब्द या अनुक्रम है जिसका अर्थ स्ट्रिंग को उलटने के बाद भी समान रहता है।
उदाहरण - नितिन, स्ट्रिंग को उलटने के बाद भी इसका अर्थ समान रहता है।
चुनौती है दिए गए वाक्य से सबसे लंबा पालिंड्रोम ढूंढना।
जैसे वाक्य है: "malayalam liemadameil iji"
इसमें तीन पालिंड्रोम शब्द हैं लेकिन सबसे लंबा है - liemadameil
एल्गोरिदम
शुरुआत
चरण 1 -> i, j, k, l, max को 0, index को -1, check को 0, count को 0 से प्रारंभ करें
चरण 2 -> लूप i = 0 से strlen(str) तक
max = 0, k = i, j = i+1 सेट करें
लूप जबकि str[j] != ' ' और str[j] != '\0'
j को 1 से बढ़ाएं
लूप समाप्त
l = j-1 सेट करें
यदि str[k] != ' ' और str[k] != '\0'
लूप जबकि k <= l
यदि str[k] == str[l]
max को 1 से बढ़ाएं
यदि count <= max
index = i और count = max सेट करें
अन्यथा
max = 0, count = -1 सेट करें
ब्रेक
k और l को बढ़ाएं/घटाएं
लूप समाप्त
i = j सेट करें
लूप समाप्त
चरण 3 -> लूप i = index से जब तक i != -1 और str[i] != ' ' और str[i] != '\0'
str[i] प्रिंट करें
लूप समाप्त
रुकें
उदाहरण
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[]) {
char str[] = "malayalam liemadameil iji";
int i, k, l, j, max = 0, index = -1, check = 0, count = 0;
for (i = 0; i < strlen(str); i++) {
max = 0;
k = i;
j = i + 1;
while (str[j] != ' ' && str[j] != '\0') {
j++;
}
l = j - 1;
if (str[k] != ' ' && str[k] != '\0') {
while (k <= l) {
if (str[k] == str[l]) {
max++;
if (count <= max) {
index = i;
count = max;
}
} else {
max = 0;
count = -1;
break;
}
k++;
l--;
}
}
i = j;
}
for (i = index; i != -1 && str[i] != ' ' && str[i] != '\0'; i++) {
printf("%c", str[i]);
}
return 0;
}
आउटपुट
liemadameil