কম্পিউটার

C++-এ সংক্ষিপ্ততম শব্দ দূরত্ব II


ধরুন একটি ক্লাস আছে যেটি কন্সট্রাক্টরে শব্দের একটি তালিকা পেয়েছে, সেখানে একটি পদ্ধতি থাকবে যা শব্দ 1 এবং শব্দ 2 দুটি শব্দ নেয় এবং তালিকায় এই দুটি শব্দের মধ্যে সবচেয়ে কম দূরত্ব খুঁজে পাবে। সেই পদ্ধতিটি বিভিন্ন পরামিতি সহ বহুবার বারবার কল করা হবে।

আসুন ধরে নিই যে শব্দগুলি =["অভ্যাস", "মেকস", "পারফেক্ট", "স্কিল", "মেকস"]।

সুতরাং, যদি ইনপুট হয় word1 =“দক্ষতা”, word2 =“অভ্যাস”, তাহলে আউটপুট হবে 3

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি মানচিত্র m

    সংজ্ঞায়িত করুন
  • ইনিশিয়ালাইজার শব্দের একটি অ্যারে নেয়

    • আরম্ভ করার জন্য i :=0, যখন i <শব্দের আকার, আপডেট (i 1 দ্বারা বৃদ্ধি), −

      • m[words[i]]

        এর শেষে i ঢোকান
  • সংক্ষিপ্ততম একটি ফাংশন সংজ্ঞায়িত করুন, এটি শব্দ1, শব্দ2,

    লাগবে
  • একটি অ্যারে সংজ্ঞায়িত করুন arr1 :=m[word1]

  • একটি অ্যারে সংজ্ঞায়িত করুন arr2 :=m[word2]

  • i :=0, j :=0

  • ret :=অসীম

  • যখন (i করুন

    • ret :=সর্বনিম্ন ret এবং |arr1[i] - arr2[j]|

    • যদি arr1[i]

      • (i 1 দ্বারা বাড়ান)

    • অন্যথায়

      • (j 1 দ্বারা বাড়ান)

  • রিটার্ন রিটার্ন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
class WordDistance {
public:
   unordered_map <string, vector <int< > m;
   WordDistance(vector<string<& words) {
      for(int i = 0; i < words.size(); i++){
         m[words[i]].push_back(i);
      }
   }
   int shortest(string word1, string word2) {
      vector<int<& arr1 = m[word1];
      vector<int<& arr2 = m[word2];
      int i = 0;
      int j = 0;
      int ret = INT_MAX;
      while (i < arr1.size() && j < arr2.size()) {
         ret = min(ret, abs(arr1[i] - arr2[j]));
         if (arr1[i] < arr2[j]) {
            i++;
         }
         else
            j++;
      }
      return ret;
   }
};
main(){
   vector<string< v = {"practice", "makes", "perfect", "skill","makes"};
   WordDistance ob(v);
   cout << (ob.shortest("skill", "practice")) << endl;
   cout << (ob.shortest("makes", "skill"));
}

ইনপুট

{"practice", "makes", "perfect", "skill", "makes"}
Call shortest("skill", "practice")
Call shortest("makes", "skill")

আউটপুট

3
1

  1. C++-এ সংক্ষিপ্ততম শব্দ দূরত্ব III

  2. C++ এ এক সম্পাদনা দূরত্ব

  3. C++ এ সংক্ষিপ্ততম সংখ্যাগরিষ্ঠ সাবস্ট্রিং

  4. C++ এ বিকে ট্রি পরিচিতি