কম্পিউটার

C++ এ দীর্ঘতম প্যালিনড্রোম


ধরুন আমাদের একটি স্ট্রিং আছে যা ছোট হাতের বা বড় হাতের অক্ষর নিয়ে গঠিত, আমাদের সেই অক্ষর দিয়ে তৈরি করা যেতে পারে এমন দীর্ঘতম প্যালিনড্রোমের দৈর্ঘ্য খুঁজে বের করতে হবে। এখন স্ট্রিংটি কেস সংবেদনশীল, তাই এখানে "Aa" কে প্যালিনড্রোম হিসাবে বিবেচনা করা হয় না।

সুতরাং, যদি ইনপুটটি "abccccdd" এর মতো হয়, তাহলে আউটপুট হবে 7, কারণ একটি দীর্ঘতম প্যালিন্ড্রোম যা তৈরি করা যেতে পারে তা হল "dccaccd", যার দৈর্ঘ্য 7৷

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

  • একটি মানচিত্র mp

    সংজ্ঞায়িত করুন
  • প্রতিটি অক্ষরের জন্য i s

    • (mp[i] 1 দ্বারা বাড়ান)

  • ma :=0, c :=0, উত্তর :=0

  • প্রতিটি কী-মানের জোড়ার জন্য i mp

    • যদি imod 2 এর মান 1 এর সমান হয়, তাহলে −

      • (ma 1 দ্বারা বৃদ্ধি করুন)

    • c :=c + i

      এর মান
  • ma> 0 হলে −

    • (ma 1 কমিয়ে দিন)

  • উত্তর :=গ - মা

  • উত্তর ফেরত দিন

উদাহরণ

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int longestPalindrome(string s) {
      unordered_map<char, int> mp;
      for (auto i : s)
         mp[i]++;
      int ma = 0, c = 0, ans = 0;
      for (auto i : mp) {
         if ((i.second) % 2 == 1)
            ma++;
         c += i.second;
      }
      if (ma > 0)
         ma--;
      ans = c - ma;
      return ans;
   }
};
main(){
   Solution ob;
   cout << (ob.longestPalindrome("abccccdd"));
}

ইনপুট

"abccccdd"

আউটপুট

7

  1. C++ এ দীর্ঘতম পুনরাবৃত্তি সাবস্ট্রিং

  2. C++ এ দীর্ঘতম অশান্ত সাবারে

  3. C++ এ প্রাইম প্যালিনড্রোম

  4. C++ এ একটি প্যালিনড্রোম ভাঙুন