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

C++-এ লংগেস্ট প্যালিনড্রোম (Longest Palindrome)


একটি স্ট্রিং দেওয়া আছে (বড়/ছোট হাতের অক্ষর কেস-সেনসিটিভ)। এই অক্ষরগুলো দিয়ে বানানো সম্ভাব্য সবচোয় লম্বা প্যালিনড্রোমের দৈর্ঘ্য বের করুন।

উদাহরণ: "abccccdd" হলে আউটপুট ৭। একটি প্যালিনড্রোম: "dccaccd"।

সমাধানের ধাপসমূহ

  • অক্ষর ফ্রিকোয়েন্সি ম্যাপ mp বানান।
  • ma := বিজোড় ফ্রিকোয়েন্সি সংখ্যা, c := মোট অক্ষর, ans := 0।
  • প্রতিটি ফ্রিকোয়েন্সি বিজোড় হলে ma++। c += ফ্রিকোয়েন্সি।
  • যদি ma > 0, ma-- (একটি বিজোড় মাঝপথে যেতে পারে)।
  • ans = c - ma।
  • ans রিটার্ন করুন।

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

#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;
    }
};

int main() {
    Solution ob;
    cout << ob.longestPalindrome("abccccdd");
    return 0;
}

ইনপুট

"abccccdd"

আউটপুট

7
  1. সর্বোচ্চ দীর্ঘ রিপিটিং সাবস্ট্রিং (C++)

  2. সি++-এ লংগেস্ট টার্বুলেন্ট সাবঅ্যারে (Longest Turbulent Subarray)

  3. সি++-এ প্রাইম প্যালিনড্রোম (Prime Palindrome)

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