একটি অক্ষরের স্ট্রিং দেওয়া আছে। স্ট্রিং-এ কমপক্ষে একটি অক্ষর দুবার রয়েছে। কাজটি হলো যেকোনো একই অক্ষরের দুটি ঘটনার মাঝপথে সর্বোচ্চ কতটি অক্ষর আছে তা খুঁজে বের করা। কোনো পুনরাবৃত্তি না থাকলে -1 রিটার্ন করবে।
উদাহরণ
ইনপুট: str = "abcdba"
আউটপুট: একই অক্ষরের দুটি ঘটনার মধ্যে সর্বোচ্চ অক্ষর সংখ্যা - 4
ব্যাখ্যা: পুনরাবৃত্তি অক্ষর 'a' এবং 'b':
১. 'a': প্রথম ইনডেক্স ০, শেষ ৫ → মাঝপথে অক্ষর = ৫-০-১ = ৪ ২. 'b': প্রথম ইনডেক্স ১, শেষ ৪ → মাঝপথে অক্ষর = ৪-১-১ = ২ সর্বোচ্চ = ৪
ইনপুট: str = "AbcAaBcbC"
আউটপুট: ৫
ব্যাখ্যা: পুনরাবৃত্তি অক্ষর 'A', 'b', 'c':
১. 'A': ইনডেক্স ০ এবং ৩ → ৩-০-১ = ২ ২. 'b': ইনডেক্স ১ এবং ৭ → ৭-১-১ = ৫ ৩. 'c': ইনডেক্স ২ এবং ৬ → ৬-২-১ = ৩ সর্বোচ্চ = ৫
নোট: "abcdefg" এর মতো কোনো পুনরাবৃত্তি না থাকলে -1 রিটার্ন হবে।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- ক্যারেক্টার অ্যারে Str[] নেওয়া হয়েছে।
- maxChars(char str[], int n) ফাংশনটি সর্বোচ্চ অক্ষর সংখ্যা গণনা করে।
- maxC = -1 দিয়ে ইনিশিয়ালাইজ।
- দুটি নেস্টেড লুপ দিয়ে সব জোড়া (i, j) চেক করা হয়।
- যদি str[i] == str[j] হয়, তবে মাঝপথের অক্ষর সংখ্যা = j - i - 1।
- এই মান maxC-এय़ বড় হলে maxC আপডেট করা হয়।
- শেষে maxC রিটার্ন করা হয়।
C প্রোগ্রাম উদাহরণ
#include <stdio.h>
#include <math.h>
int maxChars(char str[], int n) {
int maxC = -1;
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (str[i] == str[j]) {
int temp = abs(j - i - 1);
maxC = maxC > temp ? maxC : temp;
}
return maxC;
}
int main() {
char Str[] = "AbcAaBcbC";
printf("একই অক্ষরের দুটি ঘটনার মধ্যে সর্বোচ্চ অক্ষর সংখ্যা: %d", maxChars(Str, 9));
return 0;
}
আউটপুট
একই অক্ষরের দুটি ঘটনার মধ্যে সর্বোচ্চ অক্ষর সংখ্যা: 5