题目链接
题解:
1**.如果出现a[i]>b[i]则无解;**
2.我们首先从小的开始选择字母,对于选定的字母,选择的字母都有其要变成的值,我们让他们都变成要变成字母里的最小的一个,这样既不会影响其他字母的转换,也能够使得答案数最少,比如:aaa–>cdg,那么选择的字母是 ′a′ ,把它变成 ′c′ ,然后把其都变成 ′c′ 。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int q,n;
int main()
{
cin>>q;
while(q--){
cin>>n;
string a,b;
cin>>a>>b;
bool q=true;
int t[30][30]={0};
for(int i=0;i<a.size();i++){
if(a[i]>b[i]) { q=false;break;}
else if(a[i]<b[i]) {t[a[i]-'a'][b[i]-'a']++;}
else continue;
}
if(!q) cout<<-1<<endl;
else {
int sum=0;
for(int i=0;i<24;i++){
for(int j=i+1;j<24;j++){
if(t[i][j]){
sum++;
for(int k=j+1;k<24;k++) if(t[i][k]) t[j][k]++;
break;}
}
}
cout<<sum<<endl;
}
}
return 0;
}