কম্পিউটার

C++-এ n দৈর্ঘ্যের সকল হ্যাপি স্ট্রিং-এর k-তম লেক্সিকোগ্রাফিক্যাল স্ট্রিং


ধরুন আমাদের একটি স্ট্রিং আছে। আমরা এটিকে একটি সুখী স্ট্রিং বলব যখন এটি শুধুমাত্র ['a', 'b', 'c'] অক্ষর এবং s[i]!=s[i + 1] এর 1 থেকে দৈর্ঘ্য পর্যন্ত সমস্ত মানের জন্য থাকে। s - 1 (এখানে স্ট্রিংটি 1-সূচীযুক্ত)।

সুতরাং, যদি আমাদের দুটি পূর্ণসংখ্যা n এবং k থাকে, তাহলে আভিধানিক ক্রম অনুসারে n দৈর্ঘ্যের সমস্ত সুখী স্ট্রিংগুলির একটি তালিকা বিবেচনা করুন। আমাদের এই তালিকার kth স্ট্রিং খুঁজে বের করতে হবে অথবা n দৈর্ঘ্যের k হ্যাপি স্ট্রিং কম থাকলে একটি খালি স্ট্রিং ফেরত দিতে হবে।

সুতরাং, যদি ইনপুটটি n =3 এবং k =9 এর মত হয়, তাহলে আউটপুট হবে "cab", 12টি ভিন্ন হ্যাপি স্ট্রিং আছে, এগুলো হল ["aba", "abc", "aca", "acb", "bab", "bac", "bca", "bcb", "cab", "cac", "cba", "cbc"], 9মটি হল "cab"।

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

  • একটি অ্যারে ret সংজ্ঞায়িত করুন

  • একটি ফাংশন solve() সংজ্ঞায়িত করুন, এটি s লাগবে, l এটি 1 দিয়ে আরম্ভ করুন,

  • যদি l x এর সমান হয়, তাহলে −

    • ret এর শেষে s ঢোকান

    • ফেরত

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

    • যদি s এর শেষ উপাদানটি c[i] এর সমান না হয়, তাহলে −

      • সমাধান (s + c[i], l + 1)

  • প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -

  • x :=n

  • যদি n 0 এর সমান হয়, তাহলে −

    • খালি স্ট্রিং ফেরত দিন

  • সমাধান("a")

  • সমাধান("b")

  • সমাধান("c")

  • অ্যারে ret সাজান

  • প্রত্যাবর্তন (যদি k> ret এর আকার, তারপর ফাঁকা স্ট্রিং, অন্যথায় ret[k - 1])

উদাহরণ

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

#include <bits/stdc++.h>
using namespace std;
struct Cmp{
   bool operator()(string& a, string& b) {
      return !(a < b);
   }
};
char c[3] = {'a', 'b', 'c'};
class Solution {
public:
   vector<string> ret;
   int x;
   void solve(string s, int l = 1){
      if (l == x) {
         ret.push_back(s);
         return;
      }
      for (int i = 0; i < 3; i++) {
         if (s.back() != c[i]) {
            solve(s + c[i], l + 1);
         }
      }
   }
   string getHappyString(int n, int k){
      x = n;
      if (n == 0)
         return "";
      solve("a");
      solve("b");
      solve("c");
      sort(ret.begin(), ret.end());
      return k > ret.size() ? "" : ret[k - 1];
   }
};
main(){
   Solution ob;
   cout << (ob.getHappyString(3,9));
}

ইনপুট

3,9

আউটপুট

cab

  1. C++ এ স্ট্রিং দৈর্ঘ্য অনুযায়ী স্ট্রিংগুলির একটি অ্যারে সাজান

  2. 5 C++ এ একটি স্ট্রিং এর দৈর্ঘ্য খুঁজে বের করার বিভিন্ন পদ্ধতি?

  3. C++ এ স্ট্রিং এর অ্যারে

  4. একটি স্ট্রিং এর দৈর্ঘ্য খুঁজে বের করার জন্য C++ প্রোগ্রাম