मान लीजिए हमारे पास एक स्ट्रिंग है। हमें स्ट्रिंग में प्रत्येक वर्ण के ASCII मानों का योग न्यूनतम करना है, एक विशेष वर्ण की प्रत्येक घटना को हटाने के बाद। मान लीजिए "hello" जैसी स्ट्रिंग दी गई है, 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