আমাদের ইনপুট হিসেবে একটি স্ট্রিং str[] দেওয়া হয়েছে। লক্ষ্য হল str[]- থেকে এমন শব্দগুলোর সংখ্যা গণনা করা যাদের দৈর্ঘ্য str[] এর সমান এবং যাদের প্রতিটি অবস্থানের অক্ষর 본래 শব্দের (i-1)তম, iতম বা (i+1)তম অক্ষর হতে পারে।
প্রথম অক্ষরের জন্য প্রতিস্থাপন হবে iতম বা (i+1)তম অবস্থান থেকে।
শেষ অক্ষরের জন্য প্রতিস্থাপন হবে (i-1)তম বা iতম অবস্থান থেকে।
উদাহরণ
ইনপুট: str[] = "TPP"
আউটপুট: ৪
ব্যাখ্যা:
T কে T (iতম) বা প্রথম P (i+1তম) দিয়ে প্রতিস্থাপন = TPP, PPP প্রথম P কে T (i-1তম), P (iতম), বা দ্বিতীয় P (i+1তম) দিয়ে প্রতিস্থাপন = TTP, TPP, PTP দ্বিতীয় P কে প্রথম P (i-1তম) বা P (iতম) দিয়ে প্রতিস্থাপন = TPP, PTP অনন্য সংমিশ্রণ: TPP, PPP, TTP, PTP
ইনপুট: str = "aaa"
আউটপুট: ১
ব্যাখ্যা: সব অক্ষর একই হলে শুধু একটি অনন্য শব্দ তৈরি হয়।
অ্যালগরিদম
প্রতিটি অক্ষরের জন্য তিনটি সম্ভাবনা থাকে। যদি (i-1)তম, iতম, (i+1)তম তিনটি অক্ষর আলাদা হয় তবে ৩টি অপশন, দুটি একই হলে ২টি, তিনটিই একই হলে ১টি অপশন।
স্ট্রিং ট্রাভার্স করে প্রতিটি অবস্থানের জন্য অদ্বিতীয়তার পরীক্ষা করে ৩, ২ বা ১ দিয়ে গুণ করতে হবে। প্রথম এবং শেষ অক্ষরের জন্য ২ বা ১ দিয়ে গুণ করা হবে।
- স্ট্রিং কে ক্যারেক্টার অ্যারে হিসেবে নিন।
total(char str[], int length)ফাংশনটি স্ট্রিং এবং দৈর্ঘ্য নিয়ে গণনা করবে।- প্রাথমিক কাউন্ট ১ (স্ট্রিংটি নিজে)।
- যদি দৈর্ঘ্য ১ হয়, ১ ফেরত দিন।
- প্রথম অক্ষর (সূচক ০) পরীক্ষা করুন: যদি দ্বিতীয় অক্ষরের সমান হয় তবে কাউন্ট × ১, অন্যথায় × ২।
- দ্বিতীয় থেকে শেষের আগের অক্ষর পর্যন্ত (সূচক ১ থেকে length-2) লুপ চালান।
- প্রতিটি সূচক i-তে: যদি str[i] এর চাপাশের দুটোর সাথে মিলে যায় তবে × ১, দুটি মিলে যায় তবে × ২, অন্যথায় × ৩।
- শেষ অক্ষর: যদি পূর্বের অক্ষরের সাথে মিলে যায় তবে × ১, অন্যথায় × ২।
- ফলাফল ফেরত দিন।
C++ বাস্তবায়ন
#include <bits/stdc++.h>
using namespace std;
int total(char str[], int length) {
int count = 1;
if (length == 1) return count;
if (str[0] == str[1]) count *= 1;
else count *= 2;
for (int j = 1; j < length - 1; j++) {
if (str[j] == str[j-1] && str[j] == str[j+1]) count *= 1;
else if (str[j] == str[j-1]) count *= 2;
else if (str[j] == str[j+1]) count *= 2;
else if (str[j-1] == str[j+1]) count *= 2;
else count *= 3;
}
if (str[length - 1] == str[length - 2]) count *= 1;
else count *= 2;
return count;
}
int main() {
char str[] = "TPP";
int length = strlen(str);
cout << "Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: "
<< total(str, length) << endl;
return 0;
}
আউটপুট
Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: 4