কম্পিউটার

C++ এ সম্ভব হলে প্যালিনড্রোম গঠনের জন্য অক্ষরগুলোকে পুনর্বিন্যাস করুন


আমাদেরকে যে কোনো প্রদত্ত দৈর্ঘ্যের একটি স্ট্রিং 'str' দেওয়া হয়েছে। কাজটি হল অক্ষরগুলিকে এমনভাবে পুনর্বিন্যাস করা যাতে প্রদত্ত ইনপুট স্ট্রিং থেকে একটি অক্ষর যোগ বা অপসারণ না করে আউটপুটটি একটি প্যালিনড্রোম স্ট্রিং হবে। প্যালিনড্রোম স্ট্রিং হল এমন একটি যেখানে অক্ষরগুলি এমনভাবে সাজানো হয় যে তারা শুরু এবং শেষ থেকে একই উচ্চারণ করে।

আসুন এর জন্য বিভিন্ন ইনপুট আউটপুট পরিস্থিতি দেখি -

ইনপুট − string str ="itnin"

আউটপুট − যদি সম্ভব হয় প্যালিনড্রোম গঠনের জন্য অক্ষরগুলির পুনর্বিন্যাস হল:নিতিন

ব্যাখ্যা − আমাদের একটি স্ট্রিং টাইপ ভেরিয়েবল দেওয়া হয়েছে, ধরা যাক, str। এখন আমরা একটি ইনপুট স্ট্রিং এর অক্ষরগুলিকে এমনভাবে পুনর্বিন্যাস করব যে এটি একটি প্যালিনড্রোম স্ট্রিং হবে এবং যদি এটি সম্ভব না হয় তবে এটি 'সম্ভব নয়' ফিরে আসবে। সুতরাং প্রদত্ত ইনপুট স্ট্রিং সহ আউটপুট হল 'নিটিন'।

ইনপুট − string str ="baaaba"

আউটপুট − যদি সম্ভব হয় প্যালিনড্রোম গঠনের জন্য অক্ষরগুলির পুনর্বিন্যাস হল:aabbaa

ব্যাখ্যা − আমাদের একটি স্ট্রিং টাইপ ভেরিয়েবল দেওয়া হয়েছে, ধরা যাক, str। এখন আমরা একটি ইনপুট স্ট্রিং এর অক্ষরগুলিকে এমনভাবে পুনর্বিন্যাস করব যে এটি একটি প্যালিনড্রোম স্ট্রিং হবে এবং যদি এটি সম্ভব না হয় তবে এটি 'সম্ভব নয়' ফিরে আসবে। সুতরাং প্রদত্ত ইনপুট স্ট্রিং সহ আউটপুট হল 'আব্বা'।

নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতিটি নিম্নরূপ

  • স্ট্রিং টাইপের একটি ভেরিয়েবল ইনপুট করুন, ধরা যাক, str এবং একটি স্ট্রিংয়ের আকার গণনা করুন এবং এটিকে ভেরিয়েবল নামে একটি দৈর্ঘ্যে সংরক্ষণ করুন।

  • পুনঃবিন্যাস (str, length) ফাংশনে ডেটা পাস করুন।

  • ফাংশনের ভিতরে পুনঃবিন্যাস(arr, length)

    • unordered_map টাইপের 'um' হিসাবে একটি ভেরিয়েবল তৈরি করুন যেটি চার এবং পূর্ণসংখ্যার প্রকার জোড়া সংরক্ষণ করছে।

    • একটি পূর্ণসংখ্যা টাইপ ভেরিয়েবলকে মোট হিসাবে ঘোষণা করুন এবং এটিকে 0 দিয়ে সেট করুন।

    • একটি অক্ষর টাইপ ভেরিয়েবল তৈরি করুন 'ch' হিসাবে এবং স্ট্রিং টাইপ ভেরিয়েবলগুলি str_1 এবং str_2 হিসাবে।

    • i থেকে 0 পর্যন্ত লুপ শুরু করুন যতক্ষণ না i দৈর্ঘ্যের চেয়ে কম হয়। লুপের ভিতরে, um[str[i]] 1 এর বর্ধিত মান দ্বারা সেট করুন।

    • মানচিত্র 'um' পুনরাবৃত্তি করতে FOR লুপ শুরু করুন। লুপের ভিতরে, IF এটি পরীক্ষা করুন। দ্বিতীয় % 2 0 এর সমান নয় তারপর মোট 1 দ্বারা বৃদ্ধি করুন এবং প্রথমে এটির সাথে ch সেট করুন।

    • চেক করুন যদি মোট 1 এর বেশি বা মোট =1 এবং দৈর্ঘ্য % 2 =0 তারপর 0 ফেরত দিন।

    • মানচিত্র 'um' পুনরাবৃত্তি করতে FOR লুপ শুরু করুন। লুপের ভিতরে, str(it.second / 2, it.first), str_1 থেকে str_1 + str এবং str_2 থেকে str + str_2 সেট করুন।

    • IF মোট =1 চেক করুন তারপর str_1 + ch + str_2 দিন। অন্যথায়, str_1 + str_2 ফেরত দিন।

  • ফলাফল প্রিন্ট করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
string Rearrangement(string str, int length){
   unordered_map<char, int> um;
   int total = 0;
   char ch;
   string str_1 = "";
   string str_2 = "";

   for (int i = 0; i < length; i++){
      um[str[i]]++;
   }
   for(auto it : um){
      if(it.second % 2 != 0){
         total++;
         ch = it.first;
      }
   }
   if(total > 1 || total == 1 && length % 2 == 0){
      return 0;
   }
   for(auto it : um){
      string str(it.second / 2, it.first);
      str_1 = str_1 + str;
      str_2 = str + str_2;
   }
   if(total == 1){
      return str_1 + ch + str_2;
   }
   else{
      return str_1 + str_2;
   }
}
int main(){
   string str = "itnin";
   int length = str.size();
   cout<<"Rearrangement of characters to form palindrome if possible is: "<<Rearrangement(str, length);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে

Rearrangement of characters to form palindrome if possible is: nitin

  1. C++ এ getline (স্ট্রিং)

  2. একটি স্ট্রিং (পুনরাবৃত্ত) C++ বিপরীত করুন

  3. একটি প্রদত্ত স্ট্রিং C++ এ একটি প্যালিনড্রোমের ঘূর্ণন কিনা তা পরীক্ষা করুন

  4. C# এ একটি স্ট্রিংয়ের অক্ষর অদলবদল করা