কম্পিউটার

C++-এ সমস্ত স্ট্রিংকে সমান করতে অপারেশন শেষ করতে ন্যূনতম সরানো


সমস্যা বিবৃতি

দেওয়া n স্ট্রিং যে একে অপরের permutations হয়. আমাদের একটি অপারেশনের মাধ্যমে সমস্ত স্ট্রিংকে একই রকম করতে হবে যা যেকোনো স্ট্রিংয়ের প্রথম অক্ষরটিকে এর শেষে নিয়ে যায়।

উদাহরণ

যদি arr[] ={“abcd”, “cdab”} তাহলে 2টি চাল প্রয়োজন।

  • আসুন প্রথম স্ট্রিং "abcd" নেওয়া যাক। স্ট্রিং এর শেষে অক্ষর 'a' সরান। এই অপারেশনের পর স্ট্রিং হয়ে যায় "bcda"
  • এখন স্ট্রিং এর শেষে অক্ষর 'b' সরান। এই অপারেশনের পরে স্ট্রিং "cdab" হয়ে যায়। যার ফলে উভয় স্ট্রিং সমান হয়

অ্যালগরিদম

  • প্রথম স্ট্রিং নিন। আসুন আমরা একে 'str1' হিসাবে বলি।
  • নিচের মত str1 থেকে str1 যোগ করে একটি টেম্প স্ট্রিং তৈরি করুন −

    temp =str1 + str1

  • অন্য সমস্ত স্ট্রিংকে বর্তমান টার্গেটের মতো করতে প্রয়োজনীয় ঘূর্ণন গণনা করুন
  • সমস্ত স্ট্রিংয়ের জন্য উপরের ধাপগুলি পুনরাবৃত্তি করুন এবং সর্বনিম্ন সমস্ত গণনা ফেরত দিন।

উদাহরণ

#include <iostream>
#include <string>
#include <algorithm>
#include <climits>
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
using namespace std;
int minMoves(string str[], int n) {
   int minCnt = INT_MAX;
   for (int i = 0; i < n; ++i) {
      int cnt = 0;
      for (int j = 0; j < n; ++j) {
         string temp = str[j] + str[j];
         int index = temp.find(str[i]);
         if (index != string::npos) {
            cnt += index;
         }
      }
      minCnt = min(cnt, minCnt);
   }
   return minCnt;
}
int main() {
   string str[] = {"abcd", "cdab", "bacd", "cdba"};
   cout << "Minimum moves: " << minMoves(str, SIZE(str)) << endl;
   return 0;
}

আউটপুট

আপনি যখন উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করবেন। এটি নিম্নলিখিত আউটপুট −

তৈরি করে
Minimum moves: 2

  1. C++ ব্যবহার করে সমস্ত উপাদানকে সমান করতে ন্যূনতম সংখ্যা।

  2. C++ ব্যবহার করে দুটি স্ট্রিং সমান করতে প্রদত্ত অপারেশনের ন্যূনতম সংখ্যা প্রয়োজন।

  3. C++ এ একটি স্ট্রিং প্যালিনড্রোম তৈরি করতে ন্যূনতম সংখ্যক মুছে ফেলা।

  4. C++-এ অ্যারের সমস্ত উপাদান একই করতে ন্যূনতম ডিলিট অপারেশন।