这是一道模拟水题,当时居然没有做出来www。用一个数组来记录哪些字母是对应的,然后如果出现已经出现的字母对应的字母不对应就输出-1,当时一直卡住,不知道哪里错了,后面发现是一个逻辑写错了,要先记录字母再判断是否要放入vector输出,一开始我是判断了是否相等然后再来做,一直卡在14组。因为先判断的话会让这个字符相等的没有做字符对应。
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#define maxn 10000
using namespace std;
string a, b;
struct node
{
char x, y;
node(char x, char y) : x(x), y(y){};
};
char k[26];
int cnt, count1;
vector<node> v;
int main()
{
cin >> a >> b;
for (int i = 0; i < a.size(); i++)
{
if (!k[a[i] - 'a'] && !k[b[i] - 'a'])
{
k[a[i] - 'a'] = b[i];
k[b[i] - 'a'] = a[i];
if (a[i] != b[i])
{
cnt++;
v.push_back(node(a[i], b[i]));
}
}
else if (k[a[i] - 'a'] != b[i] || k[b[i] - 'a'] != a[i])
{
cout << "-1" << endl;
return 0;
}
}
cout << cnt << endl;
int len = v.size();
for (int i = 0; i < len; i++)
cout << v[i].x << " " << v[i].y << endl;
return 0;
}