题意:
一直x,y字符串,问至少需要几种替换方案才能完全替换
(替换方案 : a->b 可以将a变成b)
分析:
可以考虑用并查集,若同一位置的字符在一个联通块内就可以不用添加新的替换方案
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>>vec;
int pre[10005];
char A[100005];
char B[100005];
int Find(int x){
return pre[x]==x?x:pre[x]=Find(pre[x]);
}
void Merge(int x,int y){
int a=Find(x);
int b=Find(y);
if(a!=b){
vec.push_back(make_pair(a,b));
pre[a]=b;
}
}
int main()
{
for(int i=0;i<=1000;i++)pre[i]=i;
int n;
cin>>n;
cin>>A>>B;
for(int i=0;i<n;i++){
Merge((int)A[i],(int)B[i]);
}
cout<<vec.size()<<endl;
for(int i=0;i<vec.size();i++){
printf("%c %c\n",(char)vec[i].first,(char)vec[i].second);
}
}