ভূমিকা
একটি স্ট্রিং দেওয়া থাকলে (দৈর্ঘ্য < ১০), এর সব সম্ভাব্য অ্যালফানিউমেরিক অ্যাব্রিভিয়েশন (alphanumeric abbreviation) প্রিন্ট করতে হবে। এখানে ক্যারেক্টার ও ডিজিট মিশ্রিত থাকে, ডিজিটটি বোঝায় কতগুলো ক্যারেক্টার স্কিপ করা হয়েছে।
উদাহরণ
ইনপুট: "HELLO" আউটপুট: HELLO, HELL1, HEL1O, HEL2, HE1LO, HE1L1, HE2O, HE3, H1LLO, H1LL1, H1L1O, H1L2, H2LO, H2L1, H3O, H4, 1ELLO, 1ELL1, 1EL1O, 1EL2, 1E1LO, 1E1L1, 1E2O, 1E3, 2LLO, 2LL1, 2L1O, 2L2, 3LO, 3L1, 4O, 5
এলগরিদম (রিকার্সিভ ব্যাকট্র্যাকিং)
printAbbreviation(s, index, max, str)
শুরু
যদি index == max: str প্রিন্ট করুন, রিটার্ন
str-এ s[index] যোগ করুন
printAbbreviation(s, index+1, max, str)
str-র শেষ ক্যারেক্টার মুছুন
count = 1
যদি str খালি নয় এবং শেষ ক্যারেক্টার ডিজিট হয়:
count += সেই ডিজিটের মান, শেষ ক্যারেক্টার মুছুন
count ক্যারেক্টার হিসেবে str-এ যোগ করুন
printAbbreviation(s, index+1, max, str)
শেষ
C++ প্রোগ্রাম উদাহরণ
#includeusing namespace std; void printAbbreviation(const string& s, int index, int max, string str) { if (index == max) { cout << str << endl; return; } str.push_back(s[index]); printAbbreviation(s, index+1, max, str); str.pop_back(); int count = 1; if (!str.empty() && isdigit(str.back())) { count += str.back() - '0'; str.pop_back(); } str.push_back('0' + count); printAbbreviation(s, index+1, max, str); } void printCombination(string str) { if (str.empty()) return; printAbbreviation(str, 0, str.length(), ""); } int main() { printCombination("HELLO"); return 0; }
আউটপুট
HELLO HELL1 HEL1O HEL2 HE1LO HE1L1 HE2O HE3 H1LLO H1LL1 H1L1O H1L2 H2LO H2L1 H3O H4 1ELLO 1ELL1 1EL1O 1EL2 1E1LO 1E1L1 1E2O 1E3 2LLO 2LL1 2L1O 2L2 3LO 3L1 4O 5