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