একটি স্ট্রিং লিস্ট দেওয়া আছে। এটিকে একটি সিঙ্গেল স্ট্রিং-এ এনকোড করতে হবে এবং আবার ডিকোড করে মূল লিস্টে ফেরত আনতে হবে। দুটি মেশিনের মধ্যে ডেটা ট্রান্সমিশনের অনুকরণ:
মেশিন ১ (সেন্ডার)
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, ]