贪心\字符串\1500
大意:一个键盘键帽装错了 a是打出来的字符串 b是键帽上显示的 求已知的错位键
wa1:忘记统计正确的键帽 e.g, aa ab 是矛盾的
wa2:忘输出总数。。
wa3:矛盾判断条件为:an和bn中有一个被判断过,且an对应的值不等于bn,错误在只判断an,导致ab aa这类 未判-1
#include<bits/stdc++.h>
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define endl '\n'
#define fi for(int i=1;i<=n;i++)
#define fi2 for(int i=0;i<n;i++)
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef set<int> si;
const ll inf=0x3f3f3f3f3f3f3f3f;
const int INF=0x3f3f3f3f;
const int MAX=2e5+10;
string s1,s2;
int ans[26]; //用0-25表示a-z,只需将字符-‘a’即可得到对应编号
int v[26];
int pp,sum;
int main(){
for(int i=0;i<26;i++){
ans[i]=-1;
}
cin>>s1;
cin>>s2;
for(int i=0;i<s1.size();i++){
if(ans[s1[i]-'a']!=-1||ans[s2[i]-'a']!=-1){
if(ans[s1[i]-'a']!=s2[i]-'a'){
cout<<"-1";
return 0;
} }
else {
ans[s1[i]-'a']=s2[i]-'a';
ans[s2[i]-'a']=s1[i]-'a';
}
}
for(int i=0;i<26;i++){
if(ans[i]!=i&&ans[i]!=-1)sum++;
}
cout<<sum/2<<endl;
for(int i=0;i<26;i++){
if(ans[i]!=i&&ans[i]!=-1&&v[i]==0){
v[i]=1;
v[ans[i]]=1;
cout<<(char)(i+'a')<<' '<<(char)(ans[i]+'a')<<endl;
}
}
}