题目主要信息
1、输入一个单词作为密匙,如果单词中包含有重复的字母,只保留第1个,其余几个丢弃,然后用字母表其他未出现过的字母按顺序接在后面,作为密钥,由A-Z对应这串密钥
2、保证输入的字符串中仅包含小写字母
3、多组输入
方法一:暴力
具体方法
借助ArrayList,将key和字母表的其他字母依次放入list中,如果有相同的值保留第一个,最后遍历需要加密的字符串,在list中查找对应的加密密码。最终输出结果即可。
Java代码
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
String key = sc.next().toLowerCase();
String s = sc.next();
ArrayList<Character> list = new ArrayList<>();
for(int i=0;i<key.length();i++){
//如果list中不存在就放入
if(!list.contains(key.charAt(i))){
list.add(key.charAt(i));
}
}
//将a-z放入到list中
for(int i= 97;i<=122;i++){
char c = (char) i;
if(!list.contains(c))
list.add(c);
}
String result = "";
for(int i=0;i<s.length();i++){
if(s.charAt(i)>=97 && s.charAt(i)<=122){
result += list.get(s.charAt(i)-97);
}else {
result += Character.toUpperCase(list.get(s.charAt(i)-97));
}
}
System.out.println(result);
}
}
}
复杂度分析
- 时间复杂度:,其中为字符串key的长度,为字符串words的长度,需要分别遍历这两个字符串。
- 空间复杂度:,记录的密钥长度不超过26,属于常数空间
方法二:借助HashMap
具体方法
将方法一中得到的list存入到Map中,在遍历需要加密的字符串时,可以直接从Map中获得当前字符加密后的字符。
Java代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
String key = sc.next().toLowerCase();
String s = sc.next();
ArrayList<Character> list = new ArrayList<>();
for(int i=0;i<key.length();i++){
//如果list中不存在就放入
if(!list.contains(key.charAt(i))){
list.add(key.charAt(i));
}
}
//将A-Z放入到list中
for(int i= 97;i<=122;i++){
char c = (char) i;
if(!list.contains(c))
list.add(c);
}
Map<Character,Character> map = new HashMap<>();
int begin = 97;
for (int i=0;i<list.size();i++) {
map.put((char)(begin+i),list.get(i));
}
StringBuilder result = new StringBuilder();
for (int i=0;i<s.length();i++){
char c = s.charAt(i);
Character character = map.get(c);
if(s.charAt(i)>=97 && s.charAt(i)<=122){
result.append(character);
}else {
result.append(Character.toUpperCase(character));
}
}
System.out.println(result.toString());
}
}
}
复杂度分析
- 时间复杂度:,其中为字符串key的长度,为字符串words的长度,需要分别遍历这两个字符串。
- 空间复杂度:,记录的密钥长度不超过26,属于常数空间