কনসেপ্ট
এনক্রিপ্টেড স্ট্রিং যেখানে সাবস্ট্রিং-এর পুনরাবৃত্তি সংখ্যা সাবস্ট্রিং-এর পরেই দেওয়া থাকে। যেমন "pq2rs2" এবং k=5 হলে ডিক্রিপ্টেড স্ট্রিং "pqpqrsrs"-এর ৫ম অক্ষর 'r'। ফ্রিকোয়েন্সি একাধিক ডিজিটের হতে পারে (যেমন "pq12r3")।
ইনপুট ১
"p2q2r3", k = 6
আউটপুট ১
r
ডিক্রিপ্টেড: "ppqqrrr"
ইনপুট ২
"pq4r2ts3", k = 11
আউটপুট ২
t
ডিক্রিপ্টেড: "pqpqpqpqrrtststs"
পদ্ধতি
- দুটি পয়েন্টার দিয়ে সাবস্ট্রিং-এর দৈর্ঘ্য (len) নির্ণয় করুন (ডিজিট পাওয়া পর্যন্ত)।
- দ্বিতীয় পয়েন্টার দিয়ে ফ্রিকোয়েন্সি (freq) নির্ণয় করুন (অক্ষর পাওয়া পর্যন্ত)।
- পুনরাবৃত্ত সাবস্ট্রিং-এর দৈর্ঘ্য num = freq * len।
- যদি k > num হয়, তবে k -= num এবং পরবর্তী সাবস্ট্রিং-এ যান।
- যদি k <= num হয়, তবে k-- করে len দিয়ে মডুলো (k %= len) নিন। ফলাফল সাবস্ট্রিং-এর k-তম অক্ষর।
উদাহরণ (C++ কোড)
// C++ প্রোগ্রাম: এনক্রিপ্টেড স্ট্রিং-এ K-তম অক্ষর
#include <bits/stdc++.h>
using namespace std;
char encodedChar(string str, int k) {
int a = 0, b, m = str.length();
int len1, num1, freq1;
while (a < m) {
b = a; len1 = 0; freq1 = 0;
// সাবস্ট্রিং দৈর্ঘ্য
while (b < m && isalpha(str[b])) { b++; len1++; }
// ফ্রিকোয়েন্সি
while (b < m && isdigit(str[b])) { freq1 = freq1*10 + (str[b]-'0'); b++; }
num1 = freq1 * len1;
if (k > num1) { k -= num1; a = b; }
else { k--; k %= len1; return str[a + k]; }
}
return str[k-1]; // কোনো পুনরাবৃত্তি না থাকলে
}
int main() {
string str1 = "pqpqpqpqrrtststs"; int k1 = 11;
cout << encodedChar(str1, k1) << endl;
string str2 = "p2q2r3"; int k2 = 6;
cout << encodedChar(str2, k2) << endl;
return 0;
}
আউটপুট
t r