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

C++-এ স্ট্রিং থেকে অক্ষর মুছে বা ফেরবদল করে সর্বোচ্চ দৈর্ঘ্যের প্যালিনড্রোম তৈরি


কনসেপ্ট

একটি স্ট্রিং দেওয়া আছে। স্ট্রিং থেকে অক্ষর মুছে বা শাফল (shuffle) করে সর্বোচ্চ দৈর্ঘ্যের প্যালিনড্রোম তৈরি করুন। একাধিক প্যালিনড্রোম থাকলে যেকোনো একটি ফেরত দিন।

ইনপুট ১

pqr

আউটপুট ১

p বা q বা r

ইনপুট ২

ppqqrr

আউটপুট ২

pqrrqp বা qprrpq বা rqppqr (দৈর্ঘ্য ৬)

ইনপুট ৩

pqp

আউটপুট ৩

pqp

পদ্ধতি

যেকোনো প্যালিনড্রোম তিন भागে ভাগ করা যায়: beg (শুরু), mid (মাঝ), end (শেষ)। বिषম দৈর্ঘ্যের প্যালিনড্রোমে mid-এ এক অক্ষর থাকে, জোড় দৈর্ঘ্যে mid খালি থাকে। end همیشه beg-এর রিভার্স।

শাফলিং অনুমতিত থাকায় ইনপুট স্ট্রিং-এর অক্ষরের ক্রম গুরুত্বপূর্ণ নয়। প্রতিটি অক্ষরের ফ্রিকোয়েন্সি গণনা করুন। জোড় ফ্রিকোয়েন্সি (২n) والے অক্ষরগুলো beg-এ n এবং end-এ n করে রাখা যায়। বिषম ফ্রিকোয়েন্সি (২n+1) वाले অক্ষরগুলো থেকে একটি mid-এ রাখুন, বাকি ২n টি beg ও end-এ বाँটুন।

উদাহরণ (C++ কোড)

// C++ প্রোগ্রাম: স্ট্রিং থেকে অক্ষর মুছে/শাফল করে সর্বোচ্চ প্যালিনড্রোম
#include <bits/stdc++.h>
using namespace std;

string findLongestPalindrome(string str1) {
    int count1[256] = {0};
    for (int i = 0; i < str1.size(); i++)
        count1[str1[i]]++;
    string beg1 = "", mid1 = "", end1 = "";
    // ছোট হাতের অক্ষর ধরে নেওয়া হয়েছে, সহজে প্রসারিত করা যায়
    for (char ch1 = 'a'; ch1 <= 'z'; ch1++) {
        if (count1[ch1] & 1) { // বিষম ফ্রিকোয়েন্সি
            mid1 = ch1; // mid একদম একটি অক্ষর ধারণ করবে
            count1[ch1]--; // জোড় করে দিন
        }
        // জোড় ফ্রিকোয়েন্সি
        for (int i = 0; i < count1[ch1] / 2; i++)
            beg1.push_back(ch1);
    }
    end1 = beg1;
    reverse(end1.begin(), end1.end());
    return beg1 + mid1 + end1;
}

int main() {
    string str1 = "pqqprrs";
    cout << findLongestPalindrome(str1);
    return 0;
}

আউটপুট

pqrsrqp
  1. C++-এ একটি স্ট্রিং-এর সাবসিকোয়েন্স যা অন্য স্ট্রিং-এর সাবস্ট্রিং, তার সর্বোচ্চ দৈর্ঘ্য

  2. C++-এ এনক্রিপ্টেড স্ট্রিং (Decrypted String)-এর k-তম ক্যারেক্টার খুঁজে বের করা

  3. স্ট্রিং থেকে ভোয়েল (Vowel) রিমুভ করা (C++)

  4. পাইথনে স্ট্রিং থেকে ক্যারেক্টার সরিয়ে বা শাফেল করে সর্বোচ্চ দৈর্ঘ্যের প্যালিনড্রোম বের করা