Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tối thiểu hóa tổng giá trị ASCII sau khi xóa tất cả lần xuất hiện của một ký tự trong C++


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