在C++中移除一个字符的所有出现后最小化ASCII值之和
假设我们有一个字符串。我们需要在移除特定字符的所有出现后,最小化字符串中每个字符的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
广告
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP