#include <bits/stdc++.h> using namespace std; const int N=1e5+5,M=30; char s1[N],s2[N]; int fa[M]; struct vv{ int t,m; }; vector<vv>v; int f(int x) { if(fa[x]==x) return x; else return fa[x]=f(fa[x]); } int main() { int n,ans=0; cin>>n; for(int i=0;i<26;i++) fa[i]=i; scanf("%s",s1+1); scanf("%s",s2+1); for(int i=1;i<=n;i++) { int a=s1[i]-'a'; int b=s2[i]-'a'; if(f(a)!=f(b))//假如不相同就合并祖先?? { ans++; v.push_back({f(a),f(b)}); fa[f(a)]=f(b); } } cout<<ans<<endl; for(int i=0;i<v.size();i++) { printf("%c %c\n",v[i].m+'a',v[i].t+'a'); } return 0; }
很简单的一个题,不用想什么贪心策略,直接并查集看关系能转移不,能转移就转移就好了...