这个题目我一开始想复杂了,我想着计算两个字符串出现的字符个数,然后对个数作差,这其实是错误的解,因为自己和自己是无法相消的。
仔细再看了下题目,原来只要对字符排个序就行了,因为从下到达排序,对应位置相减,就一定可以得到最小的差和。至于怎么证明的,我这里简单说一下:
alt

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;
    char* s1 = new char[n];
    char* s2 = new char[n];
    scanf("%s%s", s1, s2);
    sort(s1, s1 + n);
    sort(s2, s2 + n);
    int sum = 0;
    for(int i = 0; i < n; i++) {
        sum += abs(s1[i] - s2[i]);
    }
    cout << sum << endl;
    return 0;
}

alt