কম্পিউটার টিউটোরিয়াল

C++-এ অক্ষর রি-অ্যারেঞ্জ করে প্যালিনড্রোম বানান (যদি সম্ভব হয়)


একটি স্ট্রিং দেওয়া থাকলে, এর অক্ষরগুলো রি-অ্যারেঞ্জ করে প্যালিনড্রোম বানাতে হবে। অক্ষর যোগ বা বাদ দেওয়া যাবে না। না পারলে "NOT POSSIBLE" ফেরত দিন।

উদাহরণ

ইনপুট − str = "itnin"

আউটপুট − Rearrangement ... is: nitin

ইনপুট − str = "baaaba"

আউটপুট − Rearrangement ... is: aabbaa

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

  • স্ট্রিং str ও দৈর্ঘ্য length নিন।

  • Rearrangement(str, length) ফাংশন কল করুন।

  • ফাংশনে unordered_map um দিয়ে ফ্রিকোয়েন্সি গণনা করুন।

  • বিজোড় ফ্রিকোয়েন্সি वाले অক্ষরগুলো গণনা করুন (total)।

  • যদি total > 1 বা total==1 && length%2==0 হয়, ০ ফেরত দিন (NOT POSSIBLE)।

  • অর্ধেক ফ্রিকোয়েন্সি দিয়ে বামপাশ str_1, ডানপাশ str_2 বানান।

  • যদি total==1 হয়, মাঝপথে বিজোড় অক্ষর ch যোগ করুন।

  • str_1 + ch + str_2 বা str_1 + str_2 ফেরত দিন।

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;

string Rearrangement(string str, int length){
    unordered_map um;
    int total = 0;
    char ch;
    string str_1 = "", 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"; // NOT POSSIBLE
    }
    for(auto it : um){
        string s(it.second / 2, it.first);
        str_1 = str_1 + s;
        str_2 = s + 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 (string) ফাংশন

  2. স্ট্রিং রিভার্স (ইটেরেটিভ) C++

  3. C++-এ একটি স্ট্রিং প্যালিনড্রোমের রোটেশন কিনা তা যাচাই করা

  4. C#-এ স্ট্রিংয়ের ক্যারেক্টার সোয়াপ করা (LINQ Select)