ধরুন আমাদের কাছে শব্দের একটি তালিকা আছে, আমরা একটি রেফারেন্স স্ট্রিং S এবং সূচী A-এর একটি তালিকা লিখে এটিকে এনকোড করতে পারি। সুতরাং উদাহরণ স্বরূপ, আসুন বিবেচনা করা যাক শব্দের তালিকা ["সময়", "me", "bell" ], তাহলে আমরা এটিকে S ="time#bell#" এবং সূচক =[0, 2, 5] হিসাবে লিখতে পারি। এখানে প্রতিটি সূচকের জন্য, আমরা "#" চিহ্নে না পৌঁছানো পর্যন্ত সেই সূচকের রেফারেন্স স্ট্রিং থেকে পড়ে শব্দটি পুনরুদ্ধার করব।
সুতরাং আমাদের খুঁজে বের করতে হবে যে প্রদত্ত শব্দগুলিকে এনকোড করে এমন সংক্ষিপ্ততম রেফারেন্স স্ট্রিং S এর দৈর্ঘ্য কত? সুতরাং প্রদত্ত উদাহরণের জন্য, আউটপুট হবে 10।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- insertNode পদ্ধতি সংজ্ঞায়িত করুন, এটি হেড এবং স্ট্রিং s লাগবে
- curr :=মাথা, পতাকা :=মিথ্যা।
- এর জন্য s-এর রেঞ্জ সাইজ 1 থেকে 0
- x :=s[i]
- যদি curr-এর m[x] শূন্য হয়, তাহলে ফ্ল্যাট সেট করুন :=true এবং curr-এর m[x]-এ একটি নতুন নোড তৈরি করুন।
- curr :=curr এর m[x]
- পতাকা সত্য হলে s এর আকার ফেরত দিন, অন্যথায় 0
- প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
- ret :=0, head :=নতুন নোড
- শব্দের দৈর্ঘ্যের উপর ভিত্তি করে অ্যারে সাজান
- n :=শব্দের আকার
- আমি 0 থেকে n – 1
- পরিসরে
- temp :=insertNode(head, words[i])
- যদি temp 0 না হয়, তাহলে ret :=ret + temp + 1
- রিটার্ন রিটার্ন।
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h> using namespace std; struct Node{ map <char, Node*> m; }; class Solution { public: static bool cmp(string a, string b){ return a.size() > b.size(); } int insertNode(Node* head, string s){ Node* curr = head; bool flag = false; for(int i = s.size() - 1; i >= 0; i--){ char x = s[i]; if(!curr->m[x]){ flag = true; curr->m[x] = new Node(); } curr = curr->m[x]; } return flag? (int)s.size() : 0; } int minimumLengthEncoding(vector<string>& words) { int ret = 0; Node* head = new Node(); sort(words.begin(), words.end(), cmp); int n = words.size(); for(int i = 0; i < n; i++){ int temp= insertNode(head, words[i]); if(temp){ ret += (temp + 1); } } return ret; } }; main(){ vector<string> v = {"time", "me", "bell"}; Solution ob; cout << (ob.minimumLengthEncoding(v)); }
ইনপুট
["time", "me", "bell"]
আউটপুট
10