题解 | #简单密码#
简单密码
https://www.nowcoder.com/practice/7960b5038a2142a18e27e4c733855dac
import java.util.*; public class Main { static Map<Integer,String> map = new LinkedHashMap<Integer, String>(){{ put(0,"0"); put(1,"1"); put(2,"abc"); put(3,"def"); put(4,"ghi"); put(5,"jkl"); put(6,"mno"); put(7,"pqrs"); put(8,"tuv"); put(9,"wxyz"); }}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); StringBuilder sb = new StringBuilder(); if (s.length() <= 100){ for (int i = 0; i < s.length(); i++) { char a = s.charAt(i); //数字不变 if (a >= '0' && a<= '9'){ sb.append(a); }else if (a >= 'a' && a<= 'z'){ //小写字母变换 sb.append(toLowerChar(a)); }else if (a>= 'A' && a<= 'Z'){ //大写字母变换 char tem = Character.toLowerCase(a); for(Map.Entry<Integer,String> m : map.entrySet()){ String value = m.getValue(); if (value.indexOf(Character.toString(tem)) > -1){ String late = value.substring(value.length() - 1); //与最后一位相同 if (late.equals(Character.toString(tem))){ sb.append(toLateStr(value,tem,m.getKey())); }else{ //与其他位相同 sb.append(toMoveStr(value,tem)); } } } } } } System.out.println(sb.toString()); } //小写字母变数字 private static Integer toLowerChar(char c){ for(Map.Entry<Integer,String> m : map.entrySet()){ String value = m.getValue(); if (value.indexOf(Character.toString(c)) > -1){ return m.getKey(); } } return null; } //大写字母得最后一位移位 private static String toLateStr(String value,char tem,Integer key) { String late = value.substring(value.length() - 1); //与最后一位相同 String valueLate = null; if (late.equals(Character.toString(tem))) { if (key == 9) { valueLate = map.get(2); } else { valueLate = map.get(key + 1); } } return valueLate.substring(0,1); } //大写字母非最后一位 private static char toMoveStr(String value,char tem){ char[] chArr = value.toCharArray(); for (int j = 0; j < chArr.length - 1; j++) { if (chArr[j] == tem){ return chArr[j+1]; } } return 0; } }