招商银行信用卡中心10.10笔试
想请问大家第二题编程怎么做的,我自己觉得没问题了,但是一直无法通过orz
代码如下
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
#include <set>
using namespace std;
int ChangeString(string& a, string& b, int n){
int res = 0;
for(int i=0; i<n; i++){
if(b[i]<a[i]) return -1;
}
if(a==b) return 0;
unordered_map<char, vector<int> > bmp;
for(int i=0; i<n; i++){
bmp[b[i]].push_back(i);
}
for(auto it=bmp.begin(); it!=bmp.end(); it++){
char ch = it->first;
int size = bmp[ch].size();
int idx = bmp[ch][0];
int ans = 0;
set<char> temp;
if(a[idx]!=ch){
ans = 1;
temp.insert(a[idx]);
}
for(int j=1; j<size; j++){
idx = bmp[ch][j];
if(a[idx]!=ch && temp.find(a[idx])==temp.end()){
ans++;
temp.insert(a[idx]);
}
}
res += ans;
}
return res;
}
int main(){
//freopen("input.txt", "r", stdin);
int T;
cin >> T;
while(T--){
int n;
cin >> n;
string a;
string b;
cin >> a >> b;
int res = ChangeString(a, b, n);
cout << res << endl;
}
return 0;
} 
查看2道真题和解析