题目链接:点击
题目大概意思是给出一个单词对比表 然后找出对应单词所有对应表中符合的单词 不考虑字母顺序 只需要单词所包含的字母相同即可
大概思路:通过hashMap去存储对应表 然后在查询
java中的HashMap 非常让人头疼的一点就是 没办法通过value去查找相应的key 因为这道题目中key对应的value有很多种 只可以key存对应表中的单词 value存排序过后的,然后通过唯一的value去查找key
AC代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class Main{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
String str,s;
Map<String,String> map =new HashMap<String, String>();
while(((str=scan.nextLine()).length())!=0&&!str.equals("XXXXXX")){
//输入对应表 单词 排序过后存value 元单词存key
char a[]=str.toCharArray();
Arrays.sort(a);
s=String.valueOf(a);
map.put(str, s);
}
while(((str=scan.nextLine()).length())!=0&&!str.equals("XXXXXX")){
char a[]=str.toCharArray();
Arrays.sort(a);
s=String.valueOf(a);
//通过对应的value 查找所有的key
ArrayList arr = valueGetKey(map, s);
if(!arr.isEmpty()) {
if(arr.size()==1){
for(int i=0; i<arr.size(); i++) {
System.out.println(arr.get(i));
}
}else{
Collections.sort(arr);
for(int i=0; i<arr.size(); i++) {
System.out.println(arr.get(i));
}
}
}else{
System.out.println("NOT A VALID WORD");
}
System.out.println("******");
}
}
private static ArrayList valueGetKey(Map map,String value) {
Set set = map.entrySet();
ArrayList arr = new ArrayList<>();
Iterator it = set.iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
if(entry.getValue().equals(value)) {
String s = (String) entry.getKey();
arr.add(s);
}
}
return arr;
}
}