मान लीजिए कि हमारे पास एक स्ट्रिंग है। किसी विशेष वर्ण की प्रत्येक घटना को हटाने के बाद, हमें प्रत्येक वर्ण के ASCII मानों के योग को स्ट्रिंग में कम करना होगा। मान लीजिए कि एक स्ट्रिंग "हैलो" की तरह दी गई है, ASCII वर्णों का योग (104 + 101 + 108 + 108 + 111) =532 है। अब प्रत्येक वर्ण की घटनाओं की जाँच करें।
- h एक बार हुआ है, इसलिए लागत 1 * 104 =104 है
- e एक बार हुआ है, इसलिए लागत 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