大家好,又见面了,我是你们的朋友全栈君。
做法:模拟
我们先定义三个char数组: a -> 小 C掌握的一条加密信息 b -> 加密信息所对应的原信息 c -> R国司令部要求小C翻译的加密信息
具体做法:
return 0
总时间复杂度:O(len(a+c))
具体见代码:
#include <bits/stdc++.h>
const int N = 100010; //题中没有要求,可自己随意开,但尽量开大些
using namespace std;
char a[N], b[N], c[N];
map <char, char> m;
map <char, char> check;
int main () {
scanf ("%s%s%s", a, b, c);
int len = strlen (a);
if (len < 26) {
cout << "Failed" << endl;
return 0;
}
for (int i = 0; i < len; i++) {
if (check[b[i]]) {//反向搜索,其中有一个点需要反过来查错
if (check[b[i]] != a[i]) {
cout << "Failed" << endl;
return 0;
}
}
if (m[a[i]]) {//正向搜索,没有反向可拿90pts
if (m[a[i]] != b[i]) {
cout << "Failed" << endl;
return 0;
}
}
else {
m[a[i]] = b[i];
check[b[i]] = a[i];
}
}
for (int i = 1; i <= 26; i++) {//查看26个字母是否都被赋值
if (!m[(char)(i+'A'-1)]) {
cout << "Failed" << endl;
return 0;
}
}
len = strlen (c);
for (int i = 0; i < len; i++) {//输出
cout << m[c[i]];
}
cout << endl;
return 0;
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155709.html原文链接:https://javaforall.cn