কম্পিউটার টিউটোরিয়াল

C++-এ এনক্রিপ্টেড স্ট্রিং থেকে K-তম অক্ষর খুঁজে বের করা (সেট-২)


কনসেপ্ট

এনক্রিপ্টেড স্ট্রিং যেখানে সাবস্ট্রিং-এর পুনরাবৃত্তি সংখ্যা সাবস্ট্রিং-এর পরেই দেওয়া থাকে। যেমন "pq2rs2" এবং k=5 হলে ডিক্রিপ্টেড স্ট্রিং "pqpqrsrs"-এর ৫ম অক্ষর 'r'। ফ্রিকোয়েন্সি একাধিক ডিজিটের হতে পারে (যেমন "pq12r3")।

ইনপুট ১

"p2q2r3", k = 6

আউটপুট ১

r

ডিক্রিপ্টেড: "ppqqrrr"

ইনপুট ২

"pq4r2ts3", k = 11

আউটপুট ২

t

ডিক্রিপ্টেড: "pqpqpqpqrrtststs"

পদ্ধতি

  1. দুটি পয়েন্টার দিয়ে সাবস্ট্রিং-এর দৈর্ঘ্য (len) নির্ণয় করুন (ডিজিট পাওয়া পর্যন্ত)।
  2. দ্বিতীয় পয়েন্টার দিয়ে ফ্রিকোয়েন্সি (freq) নির্ণয় করুন (অক্ষর পাওয়া পর্যন্ত)।
  3. পুনরাবৃত্ত সাবস্ট্রিং-এর দৈর্ঘ্য num = freq * len।
  4. যদি k > num হয়, তবে k -= num এবং পরবর্তী সাবস্ট্রিং-এ যান।
  5. যদি 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
  1. C++-এ string at() ফাংশন: নির্দিষ্ট পজিশনের ক্যারেক্টার অ্যাক্সেস

  2. স্ট্রিং-এ ক্যারেক্টার বা অ্যালফাবেটের ফ্রিকোয়েন্সি বের করার C++ প্রোগ্রাম

  3. C#-এ স্ট্রিংয়ের প্রথম ক্যারেক্টার বের করা (Substring)

  4. পাইথনে এনকোডেড স্ট্রিং-এর k-th ক্যারেক্টার বের করা (সেট-২)