প্যালিনড্রোম হল এমন শব্দ, সংখ্যা বা সিকোয়েন্স যা উল্টে পড়লেও একই থাকে। যেমন: madam, racecar, 10801।
একটি স্ট্রিং প্যালিনড্রোম কিনা চেক করতে হলে স্ট্রিংটি উল্টে দিয়ে মূল স্ট্রিংয়ের সাথে তুলনা করতে হয়। অর্থাৎ, প্রথম ও শেষ অক্ষর, দ্বিতীয় ও শেষ থেকে দ্বিতীয় অক্ষর — এভাবে সব জোড়া মিলতে হবে।
ইনপুট-আউটপুট উদাহরণ
- ইনপুট:
naman→ আউটপুট:string is a palindrome - ইনপুট:
tutorials point→ আউটপুট:string is not a palindrome
অ্যালগরিদম
- স্ট্রিংয়ের দৈর্ঘ্য বের করুন (
strlen)। - লুপ চালান
i = 0থেকেlength - 1পর্যন্ত। - প্রতিটি
iএর জন্যstring[i]এবংstring[length - i - 1]তুলনা করুন। - কোনো জোড়া মেলে না হলে
flag = 1সেট করে ব্রেক করুন। - লুপ শেষে
flagচেক করুন: ০ হলে প্যালিনড্রোম, ১ হলে নয়।
C প্রোগ্রাম
#include <stdio.h>
#include <string.h>
int main() {
char string1[] = "naman";
int i, length;
int flag = 0;
length = strlen(string1);
for (i = 0; i < length; i++) {
if (string1[i] != string1[length - i - 1]) {
flag = 1;
break;
}
}
if (flag == 1) {
printf("string is not a palindrome");
} else {
printf("string is a palindrome");
}
return 0;
}
আউটপুট
string is a palindrome
মূল পয়েন্ট
- প্রোগ্রামটি কেস-সেনসিটিভ —
Namanএবংnamanআলাদা মনে করবে। - স্পেস বা পাঙ্কচুয়েশন থাকলে সেটিও মিলান হবে (যেমন
"naman "প্যালিনড্রোম নয়)। - কেস-ইনসেনসিটিভ চেক করতে
tolower()বাtoupper()ব্যবহার করুন। - টাইম কমপ্লেক্সিটি:
O(n), স্পেস:O(1)।
উন্নত সংস্করণ (কেস-ইনসেনসিটিভ)
#include <ctype.h>
// লুপের ভিতরে:
if (tolower(string1[i]) != tolower(string1[length - i - 1])) { ... }