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

C++-এ Encode and Decode Strings: স্ট্রিং লিস্টকে এনকোড ও ডিকোড করা

একটি স্ট্রিং লিস্ট দেওয়া আছে। এটিকে একটি সিঙ্গেল স্ট্রিং-এ এনকোড করতে হবে এবং আবার ডিকোড করে মূল লিস্টে ফেরত আনতে হবে। দুটি মেশিনের মধ্যে ডেটা ট্রান্সমিশনের অনুকরণ:

মেশিন ১ (সেন্ডার)

string encode(vector<string> strs) { /* encoding logic */ }

মেশিন ২ (রিসিভার)

vector<string> decode(string s) { /* decoding logic */ }

উদাহরণ

ইনপুট: {"hello", "world", "coding", "challenge"}

এনকোডেড: 5#hello5#world6#coding9#challenge

ডিকোডেড: [hello, world, coding, challenge]

সমাধানের পদ্ধতি (Length Prefix Encoding)

প্রতিটি স্ট্রিংর জন্য: [length]#[string] ফরম্যাট ব্যবহার করা হয়। এনকোডিং-এ সব স্ট্রিং একসাথে কনক্যাট করা হয়। ডিকোডিং-এ '#' দিয়ে দৈর্ঘ্য পার্স করে স্ট্রিং এক্সট্র্যাক্ট করা হয়।

C++ কোড উদাহরণ

#include <bits/stdc++.h>
using namespace std;

void print_vector(vector<string> v) {
    cout << "[";
    for(int i = 0; i < v.size(); i++)
        cout << v[i] << ", ";
    cout << "]" << endl;
}

class Codec {
public:
    string encode(vector<string>& strs) {
        string ret = "";
        for (int i = 0; i < strs.size(); i++) {
            ret += to_string(strs[i].size()) + "#" + strs[i];
        }
        return ret;
    }
    
    int getNext(char x, int start, string s) {
        int idx = s.size();
        for (int i = start; i < s.size(); i++) {
            if (s[i] == x) {
                idx = i;
                break;
            }
        }
        return idx;
    }
    
    vector<string> decode(string s) {
        vector<string> ret;
        int i = 0;
        int n = s.size();
        while (i < n) {
            int hashPos = getNext('#', i, s);
            int len = stoi(s.substr(i, hashPos - i));
            i = hashPos + 1;
            ret.push_back(s.substr(i, len));
            i += len;
        }
        return ret;
    }
};

int main() {
    Codec ob;
    vector<string> v = {"hello", "world", "coding", "challenge"};
    string enc = (ob.encode(v));
    cout << "Encoded String " << enc << endl;
    print_vector(ob.decode(enc));
    return 0;
}

ইনপুট

{"hello", "world", "coding", "challenge"}

আউটপুট

Encoded String 5#hello5#world6#coding9#challenge [hello, world, coding, challenge, ]
  1. সংখ্যাকে 'A' এবং 'B' স্ট্রিংয়ে লেক্সিকোগ্রাফিক্যাল অর্ডারে রূপান্তর C++-তে

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

  3. দুই স্ট্রিং গুণ করে ফলাফল স্ট্রিং হিসেবে ফেরত দেওয়া C++-এ

  4. সি++-এ দুটি বাইনারি স্ট্রিং যোগ করার প্রোগ্রাম