题意思:
有字符串AA,BB,每次在AA中选取若干个相同的字母(设为xx),改成另一个字母(设为yy),需要满足x<yx<y,问将A改成B的最少操作。
题解:
例如第一个样例, 此时A要到B, A也要到C,B要到C。
那么我们可以将A都到达B,然后搭乘B到C的车,顺便完成A到C。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+6;
ll t, n;
string a, b;
int main()
{
cin >> t;
while(t --)
{
ll mp[20][20] = {0};
cin >> n;
cin >> a >> b;
bool is = true;
for(int i = 0; i < n; i ++)
{
if(a[i] > b[i]) is = false;
mp[a[i]-'a'][b[i]-'a'] = 1;
}
ll ans = 0;
if(is)
{
for(int i = 0; i < 20; i ++)
{
for(int j = i+1; j < 20; j ++)
{
if(mp[i][j]) // 如果有i
{
ans ++;
for(int k = j+1; k < 20; k ++)
{
if(mp[i][k]) mp[j][k] = 1;
}
break;
}
}
}
cout << ans << endl;
}
else
{
cout << -1 << endl;
}
}
return 0;
}