题目链接
题意:
给你两个长度相同的字符串a,b。你每次可以选择a中一些有相同字符的位置,把这些字符改成另一个大于他的字符。问至少要经过多少次修改,才能使a变成b。
思路:
我们只需要找a中与b不同的字母是否小于b中的字母并且记录是哪一个字母即可。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=1e5+7;
const int M=4e5+8;
const double eps=1e-8;
const int mod=1e9+7;
const int inf=0x7fffffff;
const double pi=3.1415926;
signed main()
{
IOS;
int t;
cin>>t;
while(t--)
{
int n,m=10086;
cin>>n;
string a,b;
set<int>e[30];
cin>>a>>b;
int ok=0;
for(int i=0;i<n;i++)
{
if(b[i]>a[i])
{
e[a[i]-'a'].insert(b[i]-'a');
}
if(a[i]>b[i])
{
ok=1;
}
}
if(ok)
{
cout<<-1<<endl;
continue;
}
int ans=0;
for(int i=0;i<26;i++)
{
int now;
if(e[i].size())
{
ans++;
now=*e[i].begin();
e[i].erase(e[i].begin());
for(auto x:e[i])
{
e[now].insert(x);
}
}
}
cout<<ans<<endl;
}
return 0;
}