একটি স্ট্রিং দেওয়া আছে (বড়/ছোট হাতের অক্ষর কেস-সেনসিটিভ)। এই অক্ষরগুলো দিয়ে বানানো সম্ভাব্য সবচোয় লম্বা প্যালিনড্রোমের দৈর্ঘ্য বের করুন।
উদাহরণ: "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