একটি স্ট্রিং হিসেবে সংখ্যা দেওয়া থাকলে (যেখানে অঙ্কগুলো রিপিট হতে পারে), সেটিকে কতভাবে বানানো/বোঝানো যায় তা গণনা করতে হবে। যেমন "11" → "double one" বা "one one"।
উদাহরণ
ইনপুট: "11211"
বর্ণনা পদ্ধতি:
- One one two one one
- Double one two one one
- One one two double one
- Double one two double one
4টি পদ্ধতি
অ্যালগরিদম
- স্ট্রিং ট্রাভার্স করুন।
- সังলগ্ন সমান অঙ্কের গোষ্ঠী (run) খুঁজুন।
- দৈর্ঘ্য L-এর গোষ্ঠীর জন্য
2^(L-1)ভাব সম্ভব। - সব গোষ্ঠীর সম্ভাবনা গুণ করুন।
C++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
long long countSpellWays(string str) {
long long count = 1;
int n = str.length();
for (int i = 0; i < n; i++) {
int runLen = 1;
while (i + 1 < n && str[i+1] == str[i]) {
runLen++;
i++;
}
count *= (1LL << (runLen - 1)); // 2^(runLen-1)
}
return count;
}
int main() {
string str = "222211";
cout << "Ways to spell: " << countSpellWays(str);
return 0;
}
ইনপুট
"222211"
আউটপুট
16