直接使用map创建映射,然后暴力替换字符串中每一个字符即可
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
// 创建映射
Map<Character, Character> mp = new HashMap<>();
mp.put('P', 'Q');
mp.put('O', 'W');
mp.put('I', 'E');
mp.put('U', 'R');
mp.put('Y', 'T');
mp.put('T', 'Y');
mp.put('R', 'U');
mp.put('E', 'I');
mp.put('W', 'O');
mp.put('Q', 'P');
mp.put('L', 'A');
mp.put('K', 'S');
mp.put('J', 'D');
mp.put('H', 'F');
mp.put('G', 'G');
mp.put('F', 'H');
mp.put('D', 'J');
mp.put('S', 'K');
mp.put('A', 'L');
mp.put('M', 'Z');
mp.put('N', 'X');
mp.put('B', 'C');
mp.put('V', 'V');
mp.put('C', 'B');
mp.put('X', 'N');
mp.put('Z', 'M');
// 生成答案
StringBuilder ans = new StringBuilder();
for (char i : str.toCharArray()) {
ans.append(mp.get(i));
}
// 输出结果
System.out.println(ans.toString());
}
}
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main() {
string str;
getline(cin, str);
// 创建映射
unordered_map<char, char> mp = {
{'P', 'Q'}, {'O', 'W'}, {'I', 'E'}, {'U', 'R'},
{'Y', 'T'}, {'T', 'Y'}, {'R', 'U'}, {'E', 'I'},
{'W', 'O'}, {'Q', 'P'}, {'L', 'A'}, {'K', 'S'},
{'J', 'D'}, {'H', 'F'}, {'G', 'G'}, {'F', 'H'},
{'D', 'J'}, {'S', 'K'}, {'A', 'L'}, {'M', 'Z'},
{'N', 'X'}, {'B', 'C'}, {'V', 'V'}, {'C', 'B'},
{'X', 'N'}, {'Z', 'M'}
};
// 生成答案
string ans;
for (char i : str) {
ans += mp[i];
}
// 输出结果
cout << ans << endl;
return 0;
}
str=input()
mp={
'P':'Q',
'O':'W',
'I':'E',
'U':'R',
'Y':'T',
'T':'Y',
'R':'U',
'E':'I',
'W':'O',
'Q':'P',
'L':'A',
'K':'S',
'J':'D',
'H':'F',
'G':'G',
'F':'H',
'D':'J',
'S':'K',
'A':'L',
'M':'Z',
'N':'X',
'B':'C',
'V':'V',
'C':'B',
'X':'N',
'Z':'M'
}
ans=''
for i in str:
ans+=mp[i]
print(ans)
小美正在输入一个英文字符串s,突然发现键盘打出来的不是自己想要的字母。检查之后发现,原来同一行内的字母键全反了。也就是说,字母A的键位,打出来的是L,反之亦然。
请你帮小美还原出他想打的字符串。
在本题中,键盘的分布为常规布局,第一行为QWERTYUIOP,第二行为ASDFGHJKL,第三行为ZXCVBNM
第一行有一个字符串s(1≤len(s)≤105),仅包含大写英文字符
输出一个字符串,代表原来的字符串。
输入
FIAAWOWUAJ
输出
HELLOWORLD