Cho chuỗi, cần xóa tất cả lần xuất hiện của một ký tự để tổng ASCII của chuỗi còn lại nhỏ nhất. Ví dụ "hello": tổng ASCII = 532. Tần suất: h(1×104), e(1×101), l(2×108=216), o(1×111). Ký tự 'l' đóng góp lớn nhất (216), xóa 'l' → tổng còn 316.
Thuật toán: tính tổng ASCII toàn chuỗi, đếm tần suất mỗi ký tự, tìm max(tần_số × ASCII), trừ khỏi tổng.
Ví dụ
#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);
}
Kết quả
Minimized Sum: 316