ধরুন আমাদের কাছে দুটি শব্দ (beginWord এবং endWord) আছে, এবং আমাদের কাছে অভিধানের শব্দ তালিকা আছে, বিগিনওয়ার্ড থেকে এন্ডওয়ার্ড পর্যন্ত সংক্ষিপ্ততম রূপান্তর অনুক্রমের দৈর্ঘ্য খুঁজে বের করুন, যেমন −
-
একটি সময়ে শুধুমাত্র একটি অক্ষর রূপান্তর করা যেতে পারে৷
৷ -
প্রতিটি রূপান্তরিত শব্দ শব্দ তালিকায় বিদ্যমান থাকা আবশ্যক. beginWord একটি রূপান্তরিত শব্দ নয়।
আমাদের মনে রাখতে হবে যে −
-
0 রিটার্ন করুন যখন এই ধরনের কোন পরিবর্তন ক্রম নেই।
-
সব শব্দের দৈর্ঘ্য একই।
-
সমস্ত শব্দে শুধুমাত্র ছোট হাতের অক্ষর থাকে৷
-
আমরা শব্দ তালিকায় কোন সদৃশ অনুমান করতে পারি।
তাই যদি ইনপুট হয়:beginWord ="hit", endWord ="cog", এবং wordlist =["hot", "dot", "dog", "lot", "log", "cog"]
তারপর আউটপুট হবে 5, কারণ একটি সংক্ষিপ্ত রূপান্তর → হট → ডট → ডগ → কগ
হিট হয়এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
পুটস্টার নামক একটি পদ্ধতি সংজ্ঞায়িত করুন, এটি j এবং স্ট্রিং s নেবে। এটি নিম্নরূপ কাজ করবে -
-
temp :=খালি স্ট্রিং
-
0 থেকে s - 1
এর আকারের মধ্যে i এর জন্য-
যদি i =j হয়, তাহলে এটির সাথে "*" সংযুক্ত করে temp আপডেট করুন, অন্যথায় s[i] কে temp এর সাথে সংযুক্ত করে temp আপডেট করুন।
-
-
মূল পদ্ধতিতে স্ট্রিং b, স্ট্রিং ই এবং শব্দের তালিকা w লাগবে, এটি −
এর মত কাজ করবে -
যদি w-তে e না থাকে, বা b খালি হয়, বা e খালি হয়, বা w খালি হয়, তাহলে 0 ফেরত দিন
-
স্ট্রিং টাইপ কী এবং অ্যারে টাইপ মানের জন্য একটি মানচিত্র m সংজ্ঞায়িত করুন।
-
আমি 0 থেকে w
এর পরিসরে-
x :=w[i]
-
j এর জন্য :=0 থেকে x এর আকার
-
inter :=putStar(j, x)
-
m[ইন্টার]
-এ x ঢোকান
-
-
-
একটি সারি q সংজ্ঞায়িত করুন, q
এ একটি জোড়া (b, 1) সন্নিবেশ করুন -
ভিজিটড
নামে একটি মানচিত্র তৈরি করুন -
যখন q খালি নয়
-
s :=q থেকে ফ্রন্ট পেয়ার, q থেকে ফ্রন্ট এলিমেন্ট মুছে দিন
-
x :=জোড়ার প্রথম উপাদান s, l :=জোড়ার দ্বিতীয় উপাদান s
-
আমি 0 থেকে x এর আকারের মধ্যে
-
temp :=putStar(i, x)
-
j এর জন্য রেঞ্জ 0 থেকে m[temp]
-
aa :=m[temp, j]
-
aa যদি e এর মত হয়, তাহলে l + 1
ফেরত দিন -
যদি পরিদর্শন করা [aa] সেট করা না থাকে, তাহলে জোড়া (aa, l + 1) ঢোকান এবং পরিদর্শন করা [aa] =1
-
-
-
-
স্তর :=0
-
রিটার্ন 0
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h> using namespace std; class Solution { public: string putStar(int j, string s){ string temp = ""; for(int i = 0; i < s.size(); i++){ if(i == j)temp += "*"; else temp += s[i]; } return temp; } int ladderLength(string b, string e, vector<string>& w) { if(find(w.begin(), w.end(), e) == w.end() || !b.size() || !e.size() || !w.size())return 0; map < string , vector <string> > m; for(int i = 0; i < w.size(); i++){ string x = w[i]; for(int j = 0; j < x.size(); j++){ string inter = putStar(j,x); m[inter].push_back(x); } } queue < pair <string, int> > q; q.push({b, 1}); map <string, int> visited; while(!q.empty()){ pair < string, int > s = q.front(); q.pop(); string x = s.first; int l = s.second; for(int i = 0; i < x.size(); i++){ string temp = putStar(i ,x); for(int j = 0; j < m[temp].size(); j++){ string aa = m[temp][j]; if(aa == e)return l+1; if(!visited[aa]){ q.push({aa, l+1}); visited[aa] = 1; } } } } int level = 0; return 0; } }; main(){ vector<string> v = {"hot","dot","dog","lot","log","cog"}; Solution ob; cout << (ob.ladderLength("hit", "cog", v)); }
ইনপুট
"hit" "cog" ["hot","dot","dog","lot","log","cog"]
আউটপুট
5