hdu1113 字典查找 java版

题目链接:点击

题目大概意思是给出一个单词对比表 然后找出对应单词所有对应表中符合的单词 不考虑字母顺序 只需要单词所包含的字母相同即可

大概思路:通过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;
          }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值