C. String Transformation 1

题意思:

有字符串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;
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页