import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
static String s;
static String[] a=new String[100010];//单词字典
static Map<Character, String > q=new TreeMap<Character, String>();
static Map<String, String > p=new TreeMap<String, String>();
static char ch;
static int tot,len,t,r;
static boolean flag;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
tot=0;
while(true) {
ch=sc.next().toCharArray()[0];
if(ch=='*')break;
s=sc.next();
q.put(ch, s);
}
while(true) {
s=sc.next();
if(s.charAt(0)=='*')break;
a[++tot]=s;
len=s.length();
String ss="";
for (int i = 0; i < len; i++) {
ss+=q.get(s.charAt(i));
}
p.put(s, ss);
}
while(true) {
s=sc.next();
if(s.charAt(0)=='*')break;
len=s.length();
flag=false;//flag=true表示为精确查找
r=0;//模糊查找,匹配字典中的位置
t=80;//长度不相等的两个,长度值差
for (int i = 1; i <=tot; i++) {
if(p.get(a[i]).equals(s)) {//精确匹配
if(!flag) {//flag=false第一个匹配的
System.out.print(a[i]);
flag=true;
}else {//还有其他精确匹配
System.out.print("!");
break;
}
}else {
int l=p.get(a[i]).length();//字典中第i个单词的长度
boolean f=true;
if(l!=len && Math.abs(l-len)<t) {//长度不等
for (int j = 0; j < Math.min(l, len); j++) {
if(p.get(a[i]).charAt(j)!=s.charAt(j)) f=false;
}
if(f) {//最短部分匹配
r=i;
t=Math.abs(l-len);
}
}
}
}
if(!flag) {
System.out.print(a[r]+"?");
}
System.out.println();
}
}
}
UVA 508 java
最新推荐文章于 2022-04-17 12:29:49 发布