ধরুন আমাদের একটি স্ট্রিং আছে। একটি নির্দিষ্ট অক্ষরের প্রতিটি সংঘটন মুছে ফেলার পরে আমাদের স্ট্রিং থেকে প্রতিটি অক্ষরের ASCII মানের সমষ্টি কমিয়ে আনতে হবে। ধরুন "হ্যালো" এর মতো একটি স্ট্রিং দেওয়া হয়েছে ASCII অক্ষরের যোগফল (104 + 101 + 108 + 108 + 111) =532। এখন প্রতিটি অক্ষরের উপস্থিতি পরীক্ষা করুন।
- h একবার হয়েছে, তাই খরচ হল 1 * 104 =104
- ই একবার হয়েছে, তাই খরচ হল 1 * 101 =101
- l একবার হয়েছে, তাই খরচ হল 2 * 108 =216
- o একবার হয়েছে, তাই খরচ হল 1 * 111 =111
এখানে l সর্বাধিক সময়ের মধ্যে ঘটেছে, তাই যদি আমরা l এর সমস্ত উপস্থিতি মুছে ফেলি, তাহলে মানটি কম করা হবে। তাই প্রকৃতপক্ষে আমরা উপরের তালিকা থেকে সর্বোচ্চ মান সরিয়ে ফেলছি। এখানে চূড়ান্ত ফলাফল হবে 532 – 216 =316
যুক্তিটি সহজ প্রথমে আমাদের স্ট্রিংয়ের ASCII যোগফল নিতে হবে। তারপর স্ট্রিংটিতে উপস্থিত প্রতিটি অক্ষরের ফ্রিকোয়েন্সি গণনা করুন, তারপর সেই অক্ষরটি সরিয়ে ফেলুন যা ঘটনা * ASCII মান হিসাবে সর্বাধিক মান অবদান রাখছে। বিয়োগকৃত মান হল ফলাফল৷
উদাহরণ
#include <iostream> using namespace std; int minASCIISum(string str, int len) { int max_val = INT_MIN, sum = 0; int frequency[26] = { 0 }; for (int i = 0; i < len; i++) { frequency[str[i] - 'a']++; sum += (int)str[i]; } for (int i = 0; i < 26; i++) max_val = max(max_val, frequency[i] * (i + 'a')); return (sum - max_val); } int main() { string str = "hello"; int n = str.length(); cout << "Minimized Sum: " << minASCIISum(str, n); }
আউটপুট
Minimized Sum: 316