小T的密码变换规则
问题描述
小T设计了一套密码变换规则,将输入的字符串转换成一串数字密码。变换规则如下:
- 小写字母按以下映射关系进行转换:
a, b, c
->2
d, e, f
->3
g, h, i
->4
j, k, l
->5
m, n, o
->6
p, q, r, s
->7
t, u, v
->8
w, x, y, z
->9
-
大写字母先转为小写字母,再跳到字母表中的前一个字母,并按上述规则转换为对应的数字。例如,
B
转换为a
,再转换为2
;A
特殊处理,先变为Z
,再转换为9
。 -
非字母字符保持不变。
例如:对于输入字符串 "LIming0701"
,转换后的数字密码为 5464640701
。
测试样例
样例1:
输入:
s = "LIming0701"
输出:'5464640701'
样例2:
输入:
s = "PassW0rd"
输出:'62778073'
样例3:
输入:
s = "helloWORLD123"
输出:'4355686752123'
思路解析:首先将映射关系存到map里面,然后借用Stringbuilder工具类,对于不同的字符采用不同的解析方式即可。注意A的映射需要单独判断
代码如下
import java.util.HashMap;
public class Main {
public static String solution(String s) {
HashMap<Character,Character> map=new HashMap<>();
map.put('a', '2');
map.put('b', '2');
map.put('c', '2');
map.put('d', '3');
map.put('e', '3');
map.put('f', '3');
map.put('g', '4');
map.put('h', '4');
map.put('i', '4');
map.put('j', '5');
map.put('k', '5');
map.put('l', '5');
map.put('m', '6');
map.put('n', '6');
map.put('o', '6');
map.put('p', '7');
map.put('q', '7');
map.put('r', '7');
map.put('s', '7');
map.put('t', '8');
map.put('u', '8');
map.put('v', '8');
map.put('w', '9');
map.put('x', '9');
map.put('y', '9');
map.put('z', '9');
char[] charArray = s.toCharArray();
StringBuilder stringBuilder=new StringBuilder();
for (char charArray2 : charArray) {
if (charArray2>='A' &&charArray2<='Z') {
if(charArray2=='A'){
char ch='z';
stringBuilder.append(map.get(ch));
}else {
char lowerCase = (char)(Character.toLowerCase(charArray2)-1);
stringBuilder.append(map.get(lowerCase));
}
}else if(charArray2>='a'&&charArray2<='z'){
stringBuilder.append(map.get(charArray2));
}else{
stringBuilder.append(charArray2);
}
}
return stringBuilder.toString(); // Placeholder
}
public static void main(String[] args) {
System.out.println(solution("LIming0701").equals("5464640701"));
System.out.println(solution("PassW0rd").equals("62778073"));
System.out.println(solution("helloWORLD123").equals("4355686752123"));
}
}