题解 | #字符串加密#
字符串加密
https://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String key = in.nextLine(); String toSecret= in.nextLine(); //build the Map small alpha Map<Character,Character> map = getMap(key); StringBuffer result = new StringBuffer(); for(char a:toSecret.toCharArray()){ result.append(map.get(a)); } System.out.println(result.toString()); } private static Map<Character,Character> getMap(String key) { Map<Character,Character> result = new HashMap<Character,Character>(); List<Character> toDuplicate = new ArrayList(); List<Character> list = new ArrayList(); for(char a:key.toCharArray()){ list.add(a); } int index = 0; for(int i=0;i<key.length();i++){ if(toDuplicate.contains(key.charAt(i))){ continue; } result.put((char)('a'+index++),key.charAt(i)); toDuplicate.add(key.charAt(i)); } for(int i=0;i<26;i++){ if(key.indexOf((char)('a'+i))==-1){ result.put((char)('a'+index++),(char)('a'+i)); } } return result; } }
按照题意顺序写,需要注意一下几点
重复字符不能算,所以要把重复字符部分扣除掉。
时间复杂度O(n)
空间复杂度O(n)