কম্পিউটার

C++ তে দীর্ঘতম অস্বাভাবিক অনুক্রম II


ধরুন আমাদের স্ট্রিং এর একটি তালিকা আছে; আমাদের তাদের মধ্যে দীর্ঘতম অস্বাভাবিক অনুবর্তন খুঁজে বের করতে হবে। দীর্ঘতম অস্বাভাবিক অনুসৃতিটি আসলে এই স্ট্রিংগুলির একটির দীর্ঘতম অনুসৃতি এবং এই পরবর্তীটি অন্যান্য স্ট্রিংগুলির কোনও অনুবর্তিত হওয়া উচিত নয়৷

আমরা জানি যে একটি অনুক্রম হল একটি ক্রম যা অবশিষ্ট উপাদানগুলির ক্রম পরিবর্তন না করে কিছু অক্ষর মুছে ফেলার মাধ্যমে একটি ক্রম থেকে উদ্ভূত হতে পারে৷

এখানে আমরা স্ট্রিংগুলির একটি তালিকা নেব, এবং আউটপুটটি দীর্ঘতম অস্বাভাবিক পরবর্তী দৈর্ঘ্যের হওয়া দরকার। যদি কোন দীর্ঘতম অস্বাভাবিক অনুক্রম না থাকে, তাহলে -1 ফেরত দিন।

সুতরাং, ইনপুট যদি "aba", "cdc", "eae" এর মত হয়, তাহলে আউটপুট হবে 3

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

উদাহরণ

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   static bool cmp(string a, string b){
      return a.size() > b.size();
   }
   int findLUSlength(vector<string>& strs){
      sort(strs.begin(), strs.end(), cmp);
      set<string> duplicates = getDuplicates(strs);
      for (int i = 0; i < strs.size(); i++) {
         if (duplicates.count(strs[i]))
            continue;
         if (i == 0)
            return strs[i].size();
         for (int j = 0; j < i; j++) {
            if (!isSubsequence(strs[j], strs[i])) {
               if ((j == i - 1)) {
                  cout << i << endl;
                  return strs[i].size();
               }
            }
            else
            break;
         }
      }
      return -1;
   }
   bool isSubsequence(string a, string b){
      int j = 0;
      for (int i = 0; i < a.size(); i++) {
         if (j < b.size() && a[i] == b[j])
            j++;
      }
      return j == b.size();
   }
   set<string> getDuplicates(vector<string>& strs){
      set<string> visited;
      set<string> ret;
      for (int i = 0; i < strs.size(); i++) {
         if (visited.count(strs[i])) {
            ret.insert(strs[i]);
         }
         visited.insert(strs[i]);
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<string> v = {"aba", "cdc", "eae"};
   cout << (ob.findLUSlength(v));
}

ইনপুট

{"aba", "cdc", "eae"}

আউটপুট

3

  1. C++ এ প্রদত্ত পার্থক্যের দীর্ঘতম পাটিগণিতিক অনুবর্তন

  2. C++-এ দীর্ঘতম ক্রমবর্ধমান অনুক্রমের সংখ্যা

  3. দীর্ঘতম সাধারণ পরবর্তী সিক্যুয়েন্সের জন্য C++ প্রোগ্রাম

  4. পাইথনে দীর্ঘতম ক্রমবর্ধমান অনুক্রম